关于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(".%sn",dic->definition);
    }
}

将导致不打印单词,但仍然打印定义,我只能假设这意味着我没有正确地释放该结构体的内存。我该如何正确地去做呢?

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

相关内容

  • 没有找到相关文章

最新更新