C++ 为什么会发生这种故障?
所以我追踪了这条线路的断层,但我不明白为什么这是断层。有人能详细说明我的错误吗 下面是变量声明C++ 为什么会发生这种故障?,c++,arrays,segmentation-fault,interpolation,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 uin
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];
下面是数组声明
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];
uint8\u t**value=new uint8\u t*[chunk\u size];
对于(i=0;i
这就是SEGFULT发生的地方
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;
}
}
}
float delta,d;
对于(i=0;i<256;++i){
对于(j=n=m=d=0;j<256;j=m){
而(i==0 | | d!=0){
d=a1[i][m];while(i==0 | | d!=0){
d=a1[i][m];外部循环以i=0开始,内部循环以d=0开始,控制而循环的逻辑是不够的(参见代码注释)
(i=0;i<256;++i)的{
对于(j=n=m=d=0;j<256;j=m){
//这里i==0始终为真(因此由于
//短路评估),然后“m”不断递增
//直到它出界
而(i==0 | | d!=0){
d=a1[i][m];问题在于以下几行:
while (i == 0 || d != 0) {
d = a1[i][m]; <------SEGFAULT per GDB
++m;
}
while(i==0 | | d!=0){
d=a1[i][m];一旦m大于或等于chunk_size,您就超过了数组的边界。这就是我对它的猜测。我还建议使用有意义的变量名,I、j、n、m和d不是很好的描述性,这会使您更难理解您要做什么。绝对确保I
和m
调用d=a1[i][m]时处于边界内
?您的while循环对于m
超出范围没有安全性。对于i
和m
的哪些值,您会得到segfault?哇,感谢大家的快速回复!我完全忽略了i
及其界限。这只是初始条件,所以需要一段时间,然后再加上m<256
似乎是一种补救方法。数组索引递增的无休止循环=>bang