我正在为Arduino编写一些C ++代码。我从0到7进行for循环,当我打印出变量n和m时,它们工作正常。但是,当我从行0000-00-00
中删除//
后,值n和m将输出如下值:
n:6 m:3
n:6 m:4
n:1030 m:5
我无法理解为什么我搞砸了自己的记忆。以下是相关代码:
ufo[i][n][m] = rumskib[n][m];
答案 0 :(得分:1)
你应该弄清楚指针,索引和范围是如何工作的。 ufo
变量在每次迭代后超出范围,*ufo[i]
使用i
int
s的数组初始化[0] [i]索引处的项,但表达式ufo[i][n][m]
访问[i] [n] [m]范围内的所有未初始化值。
答案 1 :(得分:1)
你得到了未定义的行为,因为你只在i
数组中分配了new int[i];
个元素,当你尝试写入(i, j)
位置时,它可能会发生,而不是你有UB。
UB意味着值可能已损坏,您可能会崩溃,无限循环或其他东西。
使用相应大小的已分配内存。
正确性代码可以是:
int K = 1;
for (int i = 0; i < K; i++) {
antal_ufo++;
auto ufo = new int[K][8][8];
int n, m;
for (n = 0; n < 8; n++) {
for (m = 0; m < 8; m++) {
ufo[i][n][m] = rumskib[n][m];
delay(500);
}
}
}