gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 07:06:49 25 4
gpt4 key购买 nike

至少对我来说已经足够了不起了。下面的代码在我的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com