我是C的初学者。我检查了我正在寻找的查询的各种讨论,但没有一个帮助。 我为Merge Sort编写了一个代码,我收到了以下错误:
'int'之前的预期表达式
函数'MergeSort'的参数太少
int *list; //pointer to array of integers
int * MergeSort(int *A, int x, int y); //function definition, the function returns a pointer to an array of integers.
int * MergeSort(int *A, int x, int y) //function declaration
{
//some code
int size=1+y-x;
int half=size/2;
MergeSort(int *A, 0, half-1); //error in this line
MergeSort(int *A, half, y); //error in this line
//some code
}
非常感谢帮助!谢谢。
更新:解决了以前的错误。
分段错误(核心转储)。我不明白这个问题。这是我编写的代码的链接。 http://ideone.com/mHXQ66
答案 0 :(得分:2)
调用函数时,不需要指定参数的类型。
所以而不是
MergeSort(*A, 0, half - 1);
你做
// You already specified that A was a pointer in your function definition: int *A
MergeSort(A, 0, half - 1);
如果你想调用这个函数,比如说你在顶部定义的list
参数,你就写了
MergeSort(list, myX, myY); // where myX and myY are defined somewhere, relating to your list
关于你的功能,你需要在功能体中增加一些肉。当您的阵列分成大小为1的片段时,您尤其需要检查案例。所以添加此
if(x - y < 2) // if run size == 1
return;
否则你永远不会回来!想想x == y
,你只需要反复调用MergeSort(A,0,0)直到你的堆栈溢出。
关于细分错误
我看不到您链接到的完整代码有什么问题。对我来说似乎很好,但我没有机会为你调试你的程序。相反,我将指向DDD,它是GDB调试器的图形前端,使其更加用户友好。
可以下载here,以及一个很棒的调试教程can be found here。使用它,您将在几分钟内找到错误。
答案 1 :(得分:0)
MergeSort(A, 0, half-1); //error in this line
MergeSort(A, half, y); //error in this line
答案 2 :(得分:0)
将A
作为参数传递时,无需指定类型,只需使用值名称
MergeSort(A, 0, half - 1);
MergeSort(A, half, y);