2016-04-04 2 views
-1
typedef struct //this is a some structure 
{ 
    char *a,*b; 
    float x; 
}name; 
void freeelem(void *x) //the function for element mem free 
{ 
    free(((name*)x)->a); 
    free(((name*)x)->b); 
} 
void* allocelem() // 
{ 
    void *aux; 
    aux=malloc(sizeof(name)); 
    return aux; 
} 
int main() 
{ 
    void *x=allocelem(); 
    ((name*)x)->a="fdasf"; 
    ((name*)x)->b="fafas"; 
    freeelem(x); 
    return 0; 
} 

Я не понимаю, почему это приводит к сбою. Так я вхожу в структуру? ................................................. ...............................Элемент конструкции свободный функция

ответ

0

В функции freeelem вы вызываете free указатель, который не был получен a malloc -семейная функция. Это вызывает неопределенное поведение.

Чтобы исправить это, удалите эти free звонки; или использовать функцию malloc -family при назначении a и b в main.

Кроме того, должно быть malloc(sizeof(Date))malloc(sizeof(name)), а год к году должен free(x) в конце main (или в конце freeelem).

+0

Что делать, если я не могу использовать malloc, если они уже выделены где-то еще, и я хочу их освободить? Я знаю тип и структуру. –

+0

@ConstantinMariusManuel способ 'free' работает в том, что вы можете только освобождать вещи, которые вы malloc'd. Другого варианта нет –

+0

tnx, я буду использовать strdup для чтения строк, он должен работать. –

Смежные вопросы