【问题标题】:Error Reading Variable, Cannot Access Memory读取变量时出错,无法访问内存
【发布时间】:2019-03-26 00:19:40
【问题描述】:

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

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

【问题讨论】:

    标签: c memory segmentation-fault


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

      我使您的程序几乎保持不变;只是重新调整 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-03-07
        • 2023-03-12
        • 1970-01-01
        • 1970-01-01
        • 2021-07-07
        • 2015-07-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多