我有这个结构考试。我正在使用 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/