c++ - 为什么会发生这个段错误?

标签 c++ arrays segmentation-fault interpolation

所以我已经追踪到该行的段错误,但我不明白为什么这是一个段错误。有人可以详细说明我方法的错误吗?

这里是变量声明。

size_t i, j, n, m, chunk_size, pixel_size;
i = j = n = m = 0;
chunk_size = 256;
pixel_size = 4;

这里是数组声明。

uint8_t** values = new uint8_t*[chunk_size];
for (i = 0; i < chunk_size; ++ i)
    values[i] = new uint8_t[chunk_size];

float** a1 = new float*[chunk_size];
for (i = 0; i < chunk_size; ++i)
    a1[i] = new float[chunk_size];

这是发生段错误的地方。

float delta, d;

for (i = 0; i < 256; ++i) {
    for (j = n = m = d = 0; j < 256; j = m) {
        while (i == 0 || d != 0) {
            d = a1[i][m];    <------SEGFAULT per GDB
            ++m;
        }
        delta = (d - a1[i][j]) / m;
        n = j + 1;
        while (n < j + m) {
            a1[i][n] = a1[i][n - 1] + delta;
            ++n;
        }
    }
}

我是 C++ 的新手,不明白为什么这是一个段错误。这不是将变量值设置为数组中变量的正确方法吗?那是我的段错误的根源吗?

注意:整个事情的重点是用我的简单插值公式将 4x4 数组扩展到 256x256 数组。

最佳答案

while (i == 0 || d != 0) {
    d = a1[i][m];    <------SEGFAULT per GDB
    ++m;
}

在某些情况下(例如,在外循环的第一次迭代中),这是一个无限的 while 循环。

关于c++ - 为什么会发生这个段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29784534/

相关文章:

c - 将行读取到字符串数组

c++ - 在 C++ 中使用 const 的正确方法是什么?

javascript - 在两个 JavaScript 数组中查找元素并将每个数组存储为不同的元素

linux - 在 asm 中调用函数时出现段错误

javascript - findIndex() 返回 -1 而不是正确的索引号

javascript - 从对象内的数组获取值,范围问题

c - 重新分配内存时出现段错误

c++ - Qthread 调用只运行一次

C++:从子对象到父对象的信息传播

C++ 如何使用 any_of 查找函数中的重复数字?