gpt4 book ai didi

c - C 中的段错误和递归函数

转载 作者:行者123 更新时间:2023-11-30 19:41:48 24 4
gpt4 key购买 nike

该代码可以工作,但某些编译器会抛出段错误。如果我注释掉 sumNumber 那么错误就不会发生。

int sumNumber(int array[], int k);


int main(void) {

int n;
static int num[MAX];

int k;

scanf("%d", &n);
scanf("%d", &k);


for(int i = 0; i < n; i++){
scanf("%d", &num[i]);
}

quick_sort(num,0,n-1);
printf("%d\n",sumNumber(num,k-1));

return 0;
}

int sumNumber(int array[],int k){


if(k < 0){
return 0;
}
return (array[k] + sumNumber(array,k-1));
}

最佳答案

我可以帮忙。

我正在看:

printf("%d\n",sumNumber(num,k-1));

我正在看:

int sumNumber(int array[],int k){


if(k < 0){
return 0;
}
return (array[k] + sumNumber(array,k-1));
}

仅基于这两个代码片段,您的程序并不总是有效。如果 printf 中 k 的值大致高于处理函数所需的堆栈空间乘以您选择的值,那么您将遇到堆栈溢出问题,这可能会导致段错误,因为您随后尝试编写进入无效的内存地址。

为了避免这种情况,您需要通过更改来限制数量:

int k;

scanf("%d", &n);
scanf("%d", &k);

至:

int k=0;

scanf("%d", &n);
while (k==0 || k > 100){
scanf("%d", &k);
if (k==0 || k > 100){
printf("Number invalid\n");
}
}

这样,您将强制用户输入 1 到一定数量(在本例中为 100)之间的数字。

另一个选择是修改 sumNumber 函数,使其不再递归。这样,您就可以毫无问题地允许更高的数字。

关于c - C 中的段错误和递归函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33154028/

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