unsigned int *赋值更改目标unsigned int

时间:2011-03-24 17:03:16

标签: iphone c++ objective-c c pointers

好的,这一定是愚蠢的。当我移动一些代码时,我遇到了这个问题,并且发现我输错了或者没有正确使用调试器。作为一个完整性检查,我创建了这个测试用例,但它似乎仍然失败了。

    unsigned int  vtxIdx = 0;
    unsigned int* tgtIdx;

    NSLog(@"Init %d", vtxIdx);

    tgtIdx = &vtxIdx;

    NSLog(@"After %d", vtxIdx);

    float* pVtx = new float[1000*3];

    NSLog(@"After more %d", vtxIdx);

输出:

2011-03-24 09:59:23.494 Game-iOS[] Init 0
2011-03-24 09:59:25.677 Game-iOS[] After 4
2011-03-24 09:59:31.828 Game-iOS[] After more 12

编辑:

最初让我失望的是我在XCode变量窗口中看到了奇怪的值。所以我不认为这是一个NSLog问题,因为我在XCode中看到了相同的值。在调试器中观察vtxIdx时,每条指令看起来都会增加4。

如果重要的话,所有这些代码都在.mm文件中。

1 个答案:

答案 0 :(得分:1)

对于你的第二个输出声明,如果你打印vtxIdx*tgtIdx的值,你会得到同样的结果吗?

如果您初始化tgtIdx = NULL;

,是否会发生任何变化

如果你使用完全相同的参数连续两次运行每个NSLog函数,它们每次输出相同的东西吗?

您在问题中提到了调试器。当你单步执行这个程序时,你看到了什么?

修改 还有一些想法。

如果您注释掉tgtIdx = &vtxIdx;行会怎样?

如果在现有变量声明之前添加行unsigned int dummy;,会发生什么?

由于某些东西似乎正在改变背后的变量,我的第一个想法是内存损坏问题(其他一些代码无意中写了你的变量)或链接问题(链接器看到你的变量和另一个变量同样的变量)名称,认为它们是同一个对象,并将它们合并在一起)。添加虚拟变量声明应该有助于指示问题是否是内存损坏问题,并且重命名变量应该测试任何可能的名称解析冲突。