c - 读取变量时出错,无法访问内存
问题描述
我试图用一个先例来解决我的问题,但不能适用于我的情况,这里有一个代码,用于在 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;
}
}
解决方案
该表达式i++
返回 的值,i
然后将其递增。
maxarray(arr, n, i++, maximum)
不断地调用自己,i = 0
你最终会用完调用堆栈内存。
您可以简单地使用i + 1
,因为没有理由i
在此范围内进行修改,或者使用++i
.
此外,您只需忽略递归调用的返回值,此递归,即使它正在工作,也无济于事。
推荐阅读
- java - Eclipse 创建的线程过多?
- c# - AdMob 横幅广告未在 Xamarin.iOS 应用中显示
- sql - 优化rails查询删除select方法
- python - 将python代码组织/格式化为一行
- jupyter-notebook - 使用 Jupyter Notebook 时,有没有办法从最后一个关机点继续工作
- java - 如何通过处理 XML 文件来更改 Modelica MultiBody 组件参数?
- sql-server - SQL Server 表连接
- r - 在 R arcgisbinding 中定义字段类型
- scala - 在 Chisel 中实现 Verilog $onehot 任务
- php - 搜索大量字符串php和mysql