У меня возникли проблемы с использованием и понимания функции бесплатно() в С.Повторное использование памяти в C
Я пытался писать этот пример, чтобы повторно использовать указатель, но я не понимаю, почему возникает ошибка:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
typedef struct box
{
char message[20];
}box;
box *newBox()
{
box *inBox;
inBox = (box *) malloc(sizeof(box));
return inBox;
}
int main()
{
box *temp = NULL;
temp = newBox();
strcpy(temp->message, "Hello");
printf("%s\n", temp->message);
free(temp);
strcpy(temp->message, "World");
printf("%s\n", temp->message);
free(temp);
strcpy(temp->message, "People");
printf("%s\n", temp->message);
return 0;
}
выход:
Hello
World
memory(531,0x7fff77e9e300) malloc: *** error for object 0x7fe8ba404a90: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
Abort trap: 6
есть обходной путь, чтобы исправить это?
Правило простое: для каждого указателя вы получили через 'malloc' вам нужно сделать один' free' этого указателя и как только вы сделали 'free' указатель не может быть использована больше. –
после «temp» передается в free(), он доступен для использования в программе. в C, не отбрасывать возвращаемое значение из malloc, так как это void *, поэтому его можно назначить любому другому указателю. Всегда проверяйте (! = NULL) возвращаемое значение из malloc, чтобы убедиться, что операция прошла успешно. – user3629249