我正在为 Arduino 编写一些 C++ 代码。我正在做一个从 0 到 7 的 for 循环,当我打印出变量 n 和 m 时,它们工作正常。但是一旦我从 ufo[i][n][m] = rumskib[n][m];
行中删除 //
值 n 和 m 将输出值如:
n: 6 米:3
n: 6 米:4
n: 1030 米:5
我无法理解为什么我会搞乱我的内存。下面是相关代码:
for (int i = 0; i < 1; i++) {
antal_ufo++;
int * ufo[8][8];
*ufo[i] = new int[i];
int n, m;
for (n = 0; n < 8; n++) {
for (m = 0; m < 8; m++) {
Serial.print("n: ");
Serial.println(n);
Serial.print("m: ");
Serial.println(m);
Serial.println();
Serial.println();
//ufo[i][n][m] = rumskib[n][m];
delay(500);
}
}
}
最佳答案
你会得到未定义的行为,因为你只在数组中分配 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);
}
}
}
关于C++内存故障排除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44044001/