关于 C 中内存分配的问题
Issue regarding memory allocation in C
出于某种原因,我无法正确释放我创建的结构,如下所示:
struct dictionary{
char word[50]; // Word to be described
char definition[150]; // Definition of said word
struct dictionary* next; // Linked list structure
}*dic;
typedef struct dictionary Dic;
Dic* newWord(char word[], char definition[]){
Dic* dc;
dc = malloc(sizeof(*dic));
strcpy(dc->word,word);
strcpy(dc->definition,definition);
dc->next = NULL;
return dc;
}
现在,如果我这样做:
dc = newWord("Word","definition");
free(dc);
printWord(dc);
其中:
void printWord(Dic* dic){
if(dic){
printf("<%s>\n",dic->word);
printf(".%s\n",dic->definition);
}
}
将导致没有字被打印出来,但定义仍然被打印出来,我只能假设这意味着我没有正确释放这个结构的内存。我该如何正确地去做?
您在释放指针后正在使用它。这是 undefined behavior,这意味着 C 编译器可以为所欲为。它可能会崩溃,它可能表现得正常,或者它可以做介于两者之间的任何事情。在指针上调用 free
不会将其设置为 NULL
,它会释放您对内存的要求,但您必须自己将其设置为 NULL
。
出于某种原因,我无法正确释放我创建的结构,如下所示:
struct dictionary{
char word[50]; // Word to be described
char definition[150]; // Definition of said word
struct dictionary* next; // Linked list structure
}*dic;
typedef struct dictionary Dic;
Dic* newWord(char word[], char definition[]){
Dic* dc;
dc = malloc(sizeof(*dic));
strcpy(dc->word,word);
strcpy(dc->definition,definition);
dc->next = NULL;
return dc;
}
现在,如果我这样做:
dc = newWord("Word","definition");
free(dc);
printWord(dc);
其中:
void printWord(Dic* dic){
if(dic){
printf("<%s>\n",dic->word);
printf(".%s\n",dic->definition);
}
}
将导致没有字被打印出来,但定义仍然被打印出来,我只能假设这意味着我没有正确释放这个结构的内存。我该如何正确地去做?
您在释放指针后正在使用它。这是 undefined behavior,这意味着 C 编译器可以为所欲为。它可能会崩溃,它可能表现得正常,或者它可以做介于两者之间的任何事情。在指针上调用 free
不会将其设置为 NULL
,它会释放您对内存的要求,但您必须自己将其设置为 NULL
。