C语言 读取变量时出错,无法访问内存



我试图用先例主题解决我的问题,但不适用于我的情况,这里有一个代码,用于在 c 中的数组中递归地查找数组的最大值。调试给出错误

程序接收信号SIGSEGV,分段错误。
在 maxarray (arr=0x7fffffffeb30, n=10, i=0,maximum
=( 中的0x0000000000400682 在 main.c:23

有一个最大的地址,我不明白为什么它无法访问它。

#include <stdio.h>
int maxarray ( int arr[], int n , int i, int maximum);
int main(void){
int arr[10];
int maximum = 0;
puts("the array is");
for (size_t i=0; i<10; ++i) {
arr[i]=(rand()%10);
printf("%d ",arr[i]);
}
printf("the maximum is %d",  maxarray(arr,10,0,maximum));
return 0;
}
int maxarray (int arr[10], int n, int i, int maximum){
if (i<10){
if (maximum<arr[i]){
maximum=arr[i];
}
maxarray(arr, n, i++, maximum);
}
else{
return maximum;
}
}

表达式i++返回i的值,然后递增它。

maxarray(arr, n, i++, maximum)不断使用i = 0调用自身,最终耗尽调用堆栈内存。

您可以简单地使用i + 1,因为没有理由在此范围内修改i,或使用++i.

此外,您只是忽略递归调用的返回值,即使此递归有效,也没有任何作用。

我让你的程序几乎保持不变;只是重新调整maxarray不要递归。

#include <stdio.h>
int maxarray (int arr[], int size, int maximum);
int main(void){
int arr[10];
int maximum = 0;
int size = sizeof(arr) / sizeof(int);
printf("the array is: ");
for (size_t i=0; i<10; ++i) {
arr[i]=(rand()%10);
printf("%d ",arr[i]);
}
printf("n");
printf("the maximum is %d", maxarray(arr, size, maximum));
return 0;
}
int maxarray (int arr[], int size, int maximum){
printf("sizeof(arr) is: %lld n", size);
for(int i=0; i<size; i++)
{
if (maximum<arr[i]){
maximum=arr[i];
}
}
return maximum;
}

输出:

the array is: 3 6 7 5 3 5 6 2 9 1                                                                                                                                                                                                                                                                            
sizeof(arr) is: 10                                                                                                                                                                                                                                                                                           
the maximum is 9

相关内容

  • 没有找到相关文章