c - ubuntu 上的段错误,在 debian 上运行

标签 c ubuntu segmentation-fault coredump

至少对我来说已经足够了不起了。下面的代码在我的 ubuntu 15.04 上导致 segmentation fault: core dump 但在我的 friend debian 平台上成功运行。

还要注意,我知道我的 array 有所需的索引,所以我为它获取存储空间并且索引有整数值。

int array_dequeue(int **array, int *n)
{
    int c;
    for (c = 0; c < *n - 2 ; c++)
        *array[c] = *array[c + 1];
    *n--;

    return 0;
}

//Calling that in main
int main(int argc, char* argv[])
{
    int length = atoi(argv[1]); // ./mpi.o 4 so length is 4
    int *VP;
    VP = (int*)malloc(length*sizeof(int));

    for(i=0; i<vertices; i++)
    {
        VP[i] = i + 1;
    }
    array_dequeue(&VP, &length);
}

任何帮助将不胜感激。提前致谢

最佳答案

您缺少 operator precedence 的顺序当您执行此语句时:

*array[c] = *array[c + 1];

认为这意味着“解引用数组,然后从结果数组等。

实际上的意思是:“从指针中获取cc+1指针-指向指针基 array,然后取消引用它们。

换句话说,应该是这样的:

(*array)[c] = (*array)[c + 1];

坦率地说,我认为首先没有理由通过地址传递该指针。

如评论中所述,您在运算符优先级方面还有其他问题:

*n--;

递减指针 n,然后通过取消引用评估 n 的先前值,然后忽略该评估的结果并继续前进。 *n 中存储的值保持不变。它应该是:

(*n)--;

或者简单地说:

--*n;

我更喜欢后者,因为无论如何你都会抛弃 preval。无论如何,花更多时间研究链接的运算符优先级图表。

关于c - ubuntu 上的段错误,在 debian 上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32318253/

相关文章:

ruby - 运行命令 : 'webby' 后页面显示为真

c++ - 指针数组分配的段错误?

c - 解释一下输出。它正在打印每个字母表的下一个字母表

只要输入有效就继续运行程序

python - 即使我刚刚安装它,也没有名为 'PyQt5.sip' 的模块

c++ - 帮助解决结构中的段错误

c - fread 中的段错误

c - 从标准输入读取变量输入

c - 这个错误是什么意思 : "free(): double free detected in tcache 2"

php - 无法在 Ubuntu 上使用 phpbrew 启动 fpm