[英]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);
}
}
將導致不打印任何單詞,但仍在打印定義,我只能假設這意味着我沒有正確釋放此結構的內存。 如何正確執行操作?
釋放指針后,您正在使用指針。 這是未定義的行為 ,這意味着C編譯器可以執行所需的任何操作。 它可能會崩潰,看起來可能正常運行,或者在這之間可能做任何事情。 在指針上調用free
不會將其設置為NULL
,它會釋放對內存的聲明,但是您必須自己將其設置為NULL
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.