我有这个结构考试。我正在使用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,因此在这里实际上并不需要它,但是我在这里放置了它来说明为多个对象分配内存的一般方法:将对象的大小乘以对象的数量。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句