Avatar billede dark. Nybegynder
07. februar 2004 - 00:00 Der er 7 kommentarer og
1 løsning

Unhandled exception in simple.exe. Hjælp !

Jeg har flg program i c:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "simple.h"

/* implement functions defined in simple.h */
list_element_p newElement(list_element_p prev, char *str) {
    /* allocate new element */
    list_element_p elem = (list_element_p)malloc(sizeof(struct list_element));
   
    /* copy str into the element */
    int str_len = strlen(str);
    elem->str = (char *)malloc(sizeof(char)*str_len);
    strncpy(elem->str, str, str_len);
   
    /* insert element */
    elem->prev = prev;
    if (prev != NULL) {
        list_element_p next = prev->next;
        elem->next = next;
        prev->next = elem;
        if (next != NULL)
            next->prev = elem;
    } else
        elem->next = NULL;
    return elem;
}

void deleteElement(list_element_p element) {
    /* delete the element from the list */
    list_element_p prev = element->prev;
    list_element_p next = element->next;
    if (prev != NULL)
        prev->next = next;
    if (next != NULL)
        next->prev = prev;
   
    /* free the list element */
    free(element->str);
    free(element);
}

void printElement(list_element_p element) {
    printf(element->str);
}

list_element_p findElement(list_element_p list_head, char *str) {
    list_element_p list = list_head;
    while (list != NULL) {
        if (strcmp(str, list->str) == 0)
            return list;
        list = list->next;
    }
    /* No element found */
    return NULL;
}

/* simple test program */
int main(int argc, char **argv) {
    list_element_p head;
    list_element_p elem;
    list_element_p traversal_element;
    list_element_p search_element;
   
    /* create list */
    head = newElement(NULL, "string 1");
    elem = newElement(head, "string 2");
    elem = newElement(elem, "string 3");
    elem = newElement(elem, "string 4");
   
    printElement(head);
    printf("\n");
    traversal_element = head;
    printf("All list elements:\n");
    while (traversal_element != NULL) {
        printElement(traversal_element);
        printf("\n");
        traversal_element = traversal_element->next;
    }
    search_element = findElement(head, "string 3");
    printf("Deleting element: ");
    printElement(search_element);
    printf("\n");
    deleteElement(search_element);
    printf("All list elements (again):\n");
    traversal_element = head;
    while (traversal_element != NULL) {
        printElement(traversal_element);
        printf("\n");
        traversal_element = traversal_element->next;
    }
    search_element = findElement(head, "string 4");
    printf("Deleting element: ");
    printElement(search_element);
    printf("\n");
    deleteElement(search_element);
    traversal_element = head;
    while (traversal_element != NULL) {
        printElement(traversal_element);
        printf("\n");
        traversal_element = traversal_element->next;
    }
}

og en header-fil:

#ifndef __SIMPLE_H_INCLUDED
#define __SIMPLE_H_INCLUDED

typedef struct list_element *list_element_p;

struct list_element {
    char *str;
    list_element_p next;
    list_element_p prev;
};

/* create a new list element with the specified str and add it after
prev */
list_element_p newElement(list_element_p prev, char *str);
/* delete the specified list element from its list */
void deleteElement(list_element_p element);
/* print the str value of a specified list element */
void printElement(list_element_p element);
/* search sequentially for a list element with the specified str value,
beginning at list_head */
list_element_p findElement(list_element_p list_head, char *str);

#endif /* __SIMPLE_H_INCLUDED */

- Når jeg kører programmet får jeg flg fejl:
  "Unhandled exception in simple.exe:0xC0000002: Access violation"

Jeg er temmelig ny i c-programmering, så der er sikkert noget basalt jeg har overset
Avatar billede bertelbrander Novice
07. februar 2004 - 13:39 #1
Du bør nok allokere plads til den afsluttende 0 terminering her når du allokerer plads til str:

/* copy str into the element */
    int str_len = strlen(str) + 1;
    elem->str = (char *)malloc(sizeof(char)*str_len);
    strcpy(elem->str, str);
Avatar billede bertelbrander Novice
07. februar 2004 - 13:44 #2
Det ville være en hjælp hvis vi vidste hvor det går galt.
Prøv at indsætte nogle printf'er eller køre det i en debugger.
Avatar billede dark. Nybegynder
07. februar 2004 - 16:51 #3
void printElement(list_element_p element) {
    printf(element->str);  /*Her går det galt */
}
Avatar billede bertelbrander Novice
07. februar 2004 - 17:05 #4
Har du prøvet at rette det som jeg beskrev?

Efter at jeg rettede det ser det ud til at virke.
Avatar billede dark. Nybegynder
07. februar 2004 - 18:10 #5
ja det er rigtigt :-) Skriv lige et svar
Avatar billede bertelbrander Novice
07. februar 2004 - 20:13 #6
Det er jeg ikke så meget for, jeg vil helst ikke have point.
Avatar billede hejhejhej Nybegynder
08. februar 2004 - 18:15 #7
mener du det eller skriver du det for sjovt?
Avatar billede dark. Nybegynder
08. februar 2004 - 18:23 #8
tror han mener det :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester