c - 大数组导致分段错误
问题描述
我编写了具有以下指定约束的代码:
因此,我相应地为我的变量选择了数据类型。但是,我的代码使所有测试用例都失败,说分段错误。(可能是因为他们输入的数组大小非常大。)有没有办法获得更多的堆栈空间或堆空间?或者通过以其他方式声明数组来解决这个问题?还有其他导致分段错误的原因吗?其他人已经解决了这个问题,所以一定有办法。
这是代码:
#include<stdio.h>
#include<stdlib.h>
#include<limits.h>
long find_index(long x, long *cost, long n, long used_index)
{
long i;
for(i = 0; i < n; i++)
if(*(cost + i) == x && i != used_index)
return (i+1);
return 0;
}
int purchase(long *cost, long n, long money)
{
long i, index;
for(i = 0; i < n ;i++)
{
index = find_index((money - *(cost - i)),cost,n,i);
if(index)
{
printf("%ld %ld\n",i+1,index);
break;
}
}
free(cost);
return 0;
}
int main(void)
{
int t;
long *cost, money, n, i;
scanf("%d",&t);
while(t > 0)
{
scanf("%ld",&money);
scanf("%ld",&n);
cost = (long *)malloc(n*sizeof(long));
for(i = 0; i < n; i++)
scanf("%ld",(cost+i));
purchase(cost,n,money);
t--;
}
return 0;
}
这是他们检查的隐藏测试用例之一:
35 // 这是
299701136 // 这是钱
第2044章
50293811 136626876 58515785 59281065 .....永远持续下去......
解决方案
有很多复杂的代码要分析,所以我不会给你一条鱼,而是给你一根鱼竿。
无论您使用什么平台、编译器和 IDE,都可能有一种方法可以在运行时对您的程序进行逐步调试。也许您的假设是错误的,并且分配大小不会导致此问题。
学习调试的基础知识是程序员手中真正的好工具。这是一个示例教程视频:https ://www.youtube.com/watch?v=9gAjIQc4bPU
推荐阅读
- javascript - Javascript 我想删除一个元素
- javascript - 提交按钮在其属性更改时不发布
- c++ - 创建一个不是从基类继承的新函数
- laravel - 为什么它在我的模型中作为未定义属性给出错误?
- react-native - 消息:[警告]动画:未指定“useNativeDriver”。这是必需选项
- https - Gatsbyjs 本地 HTTPS 获取浏览器安全错误
- python - 如何在图表中添加过滤器
- apache - 为什么我的服务器的referer总是为空?
- php - Laravel API 从速率限制中排除 1 个 IP 地址
- huawei-mobile-services - 华为手机推送有时候延迟太长,有什么解决办法吗?