我做:
typedef struct {
Scene *scene;
MeshStore *store;
float angle;
} DebugModel
...
free_entire_store(debug_model.store);
/* Frees the store and any meshes related to it */
void free_entire_store(MeshStore *store) {
/* implementation not important for the problem at hand */
}
现在,如果我gdb这个在free_entire_store
的开头放置一个断点,我得到以下奇怪的数据..
(gdb) p debug_model
$5 = {scene = 0x1044a680, store = 0x1044a630, angle = 87.8401108}
(gdb) p store
$6 = (MeshStore *) 0x10438b40
debug_model是一个全局的,上面的调试输出是从程序中的同一点开始的。
所以,即使我只是将指针作为参数传递,它也会以某种方式被改变。堆栈已损坏,尽管是以非常可预测的方式(每次运行都会出现相同的数据)。可能是什么导致了这个?在调用此函数之前,我认为我没有将两次或其他东西释放。作为参数传递的值如何与堆栈中的值不对应?
答案 0 :(得分:0)
我认为这是因为你正在复制函数中的指针,因此可以在本地修改它。两者都应该指向同一件事。
如果要在函数内部和外部使用完全相同的指针,则应该将指针传递给指针。
typedef struct {
Scene *scene;
MeshStore *store;
float angle;
} DebugModel
...
free_entire_store(&(debug_model.store));
/* Frees the store and any meshes related to it */
void free_entire_store(MeshStore **store) {
MeshStore *originalStore = *store;
/* implementation not important for the problem at hand */
}
答案 1 :(得分:0)
您确定正确放置了断点吗? 可能尚未分配存储,尤其是在使用优化进行编译时。 尝试在方法的第一行之后断开以确保它已经被分配。