好的,这一定是愚蠢的。当我移动一些代码时,我遇到了这个问题,并且发现我输错了或者没有正确使用调试器。作为一个完整性检查,我创建了这个测试用例,但它似乎仍然失败了。
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文件中。
答案 0 :(得分:1)
对于你的第二个输出声明,如果你打印vtxIdx
和*tgtIdx
的值,你会得到同样的结果吗?
如果您初始化tgtIdx = NULL;
?
如果你使用完全相同的参数连续两次运行每个NSLog
函数,它们每次输出相同的东西吗?
您在问题中提到了调试器。当你单步执行这个程序时,你看到了什么?
修改强> 还有一些想法。
如果您注释掉tgtIdx = &vtxIdx;
行会怎样?
如果在现有变量声明之前添加行unsigned int dummy;
,会发生什么?
由于某些东西似乎正在改变背后的变量,我的第一个想法是内存损坏问题(其他一些代码无意中写了你的变量)或链接问题(链接器看到你的变量和另一个变量同样的变量)名称,认为它们是同一个对象,并将它们合并在一起)。添加虚拟变量声明应该有助于指示问题是否是内存损坏问题,并且重命名变量应该测试任何可能的名称解析冲突。