好的,我有这个程序:
#include <unistd.h>
#include <stdio.h>
int deCode(int x[2][5])
{
return x[2][4]; // Heres where the "garbage" comes in.
} // calling x[2][4] is non valued function. I can call [0,1][0,1,2,3,4]
int main(void)
{
int newPosition;
int x[2][5]={
{1,3,5,7,9}, //[0][0-4] // row 0
{2,4,6,8,10} //[1][0-4] // row 1
}; //NOTICE NO ROW 2
printf("%d\n", deCode(&x));
}
我玩这个节目时得到的价值是1。显然你可能不会得到同样的解析。 当我做[2] [1,2,3,5]时,我得到真正的垃圾。我只是想知道是这样的 百万分之一的机会或者我错过了什么?
答案 0 :(得分:4)
肯定不是随机。这是未定义的。
例如,您可能只是在阅读另一个变量。如果该变量是字符数组\0\0\0\0\0...
,那么您将读取大量的零。如果它是int
数组1, 1, 1, 1...
,您会看到1。
通常,您会看到2^32-1
等数字,您可能会很快识别出来。当您意外地将signed int解释为unsigned int时,会发生类似的情况。
调试的一个策略是将所有内存初始化为0xCC。那么你将不会收到原始内存,你会看到0xCC,它很可能会崩溃你的程序而不是默默接受。