首页 > 解决方案 > 读取变量时出错,无法访问内存

问题描述

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

程序收到信号 SIGSEGV,分段错误。
0x0000000000400682 in maxarray (arr=0x7ffffffffeb30, n=10, i=0,
maximum=) at 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;
    }
}

标签: cmemorysegmentation-fault

解决方案


该表达式i++返回 的值,i然后将其递增。

maxarray(arr, n, i++, maximum)不断地调用自己,i = 0你最终会用完调用堆栈内存。

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

此外,您只需忽略递归调用的返回值,此递归,即使它正在工作,也无济于事。


推荐阅读