結構體指針釋放問題


第一種情況:name指針也申請了堆內存,此時需要釋放name指向的內存后再釋放結構體節點指針
Student *p = (Student*)malloc(sizeof(Student)); // 申請內存:結構體一個節點
if (p == nullptr) { return 0; }
p->name = (char*)malloc(sizeof(char) * kNameLen); // 申請內存:name 指針指向多大可以使用的內存
p->age = 22;
strncpy(p->name, "lilie", strlen("lilie"));
// 釋放:先釋放
p->name free(p->name);
// 再釋放
p free(p);
p = nullptr;
 
第二種情況:name指針沒有申請堆內存,我們只需要釋放結構體節點指針指向的內存就可以了
Student *p = (Student*)malloc(sizeof(Student)); // 申請內存:結構體一個節點
if (p == nullptr) { return 0; }
p->age = 22; // 無需釋放p->name所指向內存,因為壓根就沒有申請內存,只需要釋放 p
free(p);
p = nullptr;

作者:3cpj
鏈接:https://www.zhihu.com/question/426764203/answer/1536688156
來源:知乎


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM