第一种情况: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
来源:知乎