C++内存故障排除

标签 c++ memory

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

相关文章:

c++ - 为什么 return 会改变我的值(value)?

c++ - 当您不知道整数范围是按升序还是降序排列时,如何迭代它?

c++ - memcpy 仅通过 C++ 复制一个字节

c++ - 为什么我的 C++ 程序在执行 tcmalloc heap-checker 或 heap-profile 时使用大量内存

javascript - Canvas 甚至 Img 吃 RAM 和 CPU

c - Solaris 中 prstat SIZE 值增加是否表示内存泄漏?

c++ - std::atomic 到什么程度?

c++ - 缩写类中定义的类型的全名

c++ - __GI_raise 中的 ACE 崩溃

delphi - 我将文件加载到内存流时出现Delphi内存不足错误