至少对我来说已经足够了不起了。下面的代码在我的 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];
您认为这意味着“解引用数组
,然后从结果数组等。
这实际上的意思是:“从指针中获取c
和c+1
指针-指向指针基 array
,然后取消引用它们。
换句话说,应该是这样的:
(*array)[c] = (*array)[c + 1];
坦率地说,我认为首先没有理由通过地址传递该指针。
如评论中所述,您在运算符优先级方面还有其他问题:
*n--;
递减指针 n
,然后通过取消引用评估 n
的先前值,然后忽略该评估的结果并继续前进。 *n
中存储的值保持不变。它应该是:
(*n)--;
或者简单地说:
--*n;
我更喜欢后者,因为无论如何你都会抛弃 preval。无论如何,花更多时间研究链接的运算符优先级图表。
关于c - ubuntu 上的段错误,在 debian 上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32318253/