zoukankan      html  css  js  c++  java
  • 结构体指针释放问题

    第一种情况: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
    来源:知乎
  • 相关阅读:
    A
    快速幂
    思维+LCA
    补题
    Manacher-马拉车算法
    AC自动机
    欢迎来怼-Alpha周(2017年10月19)贡献分配规则和分配结果
    欢迎来怼--第二十一次Scrum会议
    作业要求 20171026 每周例行报告
    Alpha发布-----欢迎来怼团队
  • 原文地址:https://www.cnblogs.com/tiange-137/p/14198937.html
Copyright © 2011-2022 走看看