好吧,这一定是很愚蠢的事情。我在移动一些代码时遇到了这个问题,并认为我犯了一个拼写错误或未能正确使用调试器。作为一个健全的检查,我创建了这个测试用例,但它似乎仍然失败。
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文件中。
发布于 2011-03-25 01:17:25
对于第二个output语句,如果同时输出vtxIdx和*tgtIdx的值,是否会得到相同的结果
如果初始化tgtIdx = NULL;,会有什么变化吗
如果您使用完全相同的参数连续运行每个NSLog函数两次,那么它们是否每次都输出相同的内容?
您在问题中提到了调试器。当您单步执行此程序时,您看到了什么?
编辑:还有一些想法。
如果注释掉tgtIdx = &vtxIdx;行,会发生什么?
如果在现有变量声明之前添加unsigned int dummy;行,会发生什么情况?
由于背后似乎有什么东西在改变变量,我首先想到的是内存损坏问题(一些其他代码无意中覆盖了您的变量)或链接问题(链接器看到了您的变量和另一个同名的变量,认为它们是同一个对象,然后将它们合并在一起)。添加虚拟变量声明应该有助于指明问题是否是内存损坏问题,重命名变量应该测试是否存在任何可能的名称解析冲突。
https://stackoverflow.com/questions/5422795
复制相似问题