c ++内存故障排除

时间:2017-05-18 09:35:20

标签: c++ memory

我正在为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];

2 个答案:

答案 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);
        }
    }
}