c - 我试图使用 free() 释放结构中元素占用的内存,但它不起作用

标签 c pointers struct malloc free

我有这个结构考试。我正在使用 cleanUp 函数来分配和释放标题占用的内存,但它没有释放它。

    typedef struct
    {
        char* title;
        Question* questions[MAX_QUESTIONS];
    }Exam;

    BOOL CleanUp(Exam * e){
    char name[200];
        printf("Enter name of the course \n");
        gets(name);
        fflush(stdout);
        e->title = (char*)malloc(sizeof(strlen(name)+1));
        strcpy(e->title,name);

        free(e->title);
    }

最佳答案

sizeof(strlen(name)+1) 不正确,这给出了该计算结果的大小,即 sizeof(int)。因为您分配了错误的大小,所以您正在写入超出缓冲区末尾的内容。

这会损坏数据并导致 free() 失败。

你的意思是:

sizeof(char) * (strlen(name) + 1)

在 C 中,sizeof(char) 保证为 1,因此这里实际上不需要它,但是我将它放在那里是为了说明为多个对象分配内存的一般方法。对象:将对象的大小乘以对象的数量。

关于c - 我试图使用 free() 释放结构中元素占用的内存,但它不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28109351/

相关文章:

go - 在 golang 中初始化包含一片结构的结构

c - 在 c 中使用 Shmget() 和结构体

c - 这是将地址传递给函数的正确或可接受的方式吗?

c 数组函数

c - 具有可变成员大小的结构

java - 使用Parse.com指针查询两个类的数据,指针值异常

c - 为什么在嵌入式系统代码中通过 memcpy 复制结构?

c - 在 C 中取消引用指向不完整类型错误的指针

C字面后缀U、UL问题

c++ - 如何将模板从 C++ 转换为 C