我的代码中遇到错误,其中if()语句正在检查数组末尾的值。 IE,
int arrayX [2];
if(arrayX [2])
FunctionCall();
这导致了一个函数调用,由于与上述数组的长度相关的原因,它试图用带有越界索引的向量下标,从而产生错误。但是,只有在Xcode调试器下运行时才会出现错误;每当我在终端下运行时,它都没有发生。这让我怀疑当我在终端下运行时,阵列外部的内存被归零或由于其他原因趋于零。 if语句每个周期都会测试80个不同的“错误”数组,因此它似乎不太可能是它永远不会在终端下弹出。
为了清楚起见,我的问题是:为什么未分配或不相关的内存在终端下运行时保持为零,而在调试器下运行则不行。
答案 0 :(得分:1)
许多调试器使用一些不同的模式填充未使用的内存,因此您所描述的行为恰好发生。
答案 1 :(得分:1)
究竟是什么问题? 无论问题是什么,答案很可能......程序生成器可以做到这一点。示例代码的行为未定义,因此生成的程序的行为完全不可预测。
答案 2 :(得分:0)
你无法确定阵列外的数据是什么。是否有任何调试器将该部分内存归零,它可能是Xcode调试器,而不是终端。所以对我来说很奇怪你终端没有问题!!
你说“if语句每个周期都会测试80个不同的'错误'数组”,请考虑一下:你确定那些“不同”错误的数组实际上存在于ram的“不同”区域(如果它的静态数据编译器可能会将它放入曾经的地方并重新使用它)?并且,编译器(/ interpreter)可以优化您的代码并且还可以处理内存。