关于C语言中内存分配的问题

关于C语言中内存分配的问题,c,malloc,free,C,Malloc,Free,由于某些原因,我无法正确释放我创建的结构,如下所示: 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[],

由于某些原因,我无法正确释放我创建的结构,如下所示:

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);
    }
}

将导致没有打印单词,但定义仍在打印,我只能假设这意味着我没有正确释放此结构的内存。如何正确地执行此操作?

释放指针后,您正在使用指针。这意味着C编译器可以做任何它想做的事情。它可以崩溃,可以表现得正常,也可以在两者之间做任何事情。对指针调用free不会将其设置为NULL,它会释放您对内存的声明,但您必须自己将其设置为NULL

可能重复的