Max*_*ost 4 c arrays free struct memory-management
我今天学到了一个新技巧,包括结束一个带有零长度数组的结构,以允许该数组根据需要动态调整大小.这非常方便,当我想确定我的struct在运行时而不是编译时占用的空间量时,可以节省大量内存.
使用它们完美无缺; 然后我记得我需要释放我分配的内存,所以我只是扔了一个免费的(struct); 在那里,但令我沮丧的是,这给我一个错误:
*** glibc detected *** ./program: free(): invalid next size (fast): <address>
======= Backtrace: =========
<omitted>
======= Memory Map: ========
<omitted>
Run Code Online (Sandbox Code Playgroud)
这是一个格式不佳的代码中的简单示例:
struct Stuff {
int size; // defines the amount of bytes the entire struct will take up
char data[0];
}
...
// This gives me an int and a char[30].
struct Stuff *ptr = (struct Stuff *) malloc(sizeof(struct Stuff) + 30);
...
doStuff();
...
free(ptr);
Run Code Online (Sandbox Code Playgroud)
我得到了免费的错误(ptr);
有任何想法吗?
你的malloc()/ free()代码很好.要验证,注释掉malloc()和之间的所有内容free(),并查看问题是否消失(我敢打赌).
你几乎肯定会在某处(可能在doStuff())中写入已分配内存的末尾.例如,如果doStuff()用于ptr->size确定大小ptr->data,请确保ptr->size正确初始化.