dadevelopa
Mitglied
Hallo zusammen, ich habe mal wieder ein kleines C Memory Problem.
In folgender Funktion wird beim freigeben des Stringpointer jeweils der Fehler DAMAGE:after normal block geworfen.
Ich verstehe jedoch nicht warum, ein String wird doch normalerweise so freigegeben...
Koennt ihr mir sagen, warum das so ist, und wie ich den Fehler beheben kann?
In folgender Funktion wird beim freigeben des Stringpointer jeweils der Fehler DAMAGE:after normal block geworfen.
Ich verstehe jedoch nicht warum, ein String wird doch normalerweise so freigegeben...
Code:
struct datensatz* parseUserString(char *str, int size){
char *tmp = (char *) calloc(size, sizeof(char));
char *ihu;
struct datensatz *list;
int actualId = 0;
list = (struct datensatz*)malloc(sizeof(struct datensatz));
list->next = NULL;
strcpy (tmp, str);
while (strlen (tmp) > 1) {
ihu = strrchr (tmp, '@');
*ihu = '\0';
ihu = strrchr (tmp, '/');
if (ihu == NULL) {
break;
}
strcpy (list->telP, (ihu + 1));
*(ihu) = '\0';
ihu = strrchr (tmp, '/');
strcpy (list->telN, (ihu + 1));
*(ihu) = '\0';
ihu = strrchr (tmp, '/');
strcpy (list->telG, (ihu + 1));
*(ihu) = '\0';
ihu = strrchr (tmp, '/');
strcpy (list->idle, (ihu + 1));
*(ihu) = '\0';
ihu = strrchr (tmp, '/');
strcpy (list->host, (ihu + 1));
*(ihu) = '\0';
ihu = strrchr (tmp, '/');
strcpy (list->user, (ihu + 1));
*(ihu) = '\0';
list->id = actualId;
list->prev = (struct datensatz*)malloc(sizeof(struct datensatz));
list->prev->next = list;
list = list->prev;
actualId++;
}
list = list->next;
free(list->prev);
list->prev = NULL;
free(tmp); //hier wird der Fehler geworfen
return list;
}
Koennt ihr mir sagen, warum das so ist, und wie ich den Fehler beheben kann?
Zuletzt bearbeitet: