所以我已经追踪到该行的段错误,但我不明白为什么这是一个段错误。有人可以详细说明我方法的错误吗?
这里是变量声明。
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/