传递指针:堆栈中的不同值?

时间:2011-01-19 21:04:03

标签: c malloc

我做:

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是一个全局的,上面的调试输出是从程序中的同一点开始的。

所以,即使我只是将指针作为参数传递,它也会以某种方式被改变。堆栈已损坏,尽管是以非常可预测的方式(每次运行都会出现相同的数据)。可能是什么导致了这个?在调用此函数之前,我认为我没有将两次或其他东西释放。作为参数传递的值如何与堆栈中的值不对应?

2 个答案:

答案 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)

您确定正确放置了断点吗? 可能尚未分配存储,尤其是在使用优化进行编译时。 尝试在方法的第一行之后断开以确保它已经被分配。