Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么会发生这种故障?_C++_Arrays_Segmentation Fault_Interpolation - Fatal编程技术网

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