【发布时间】:2018-05-24 18:29:40
【问题描述】:
我写了一个带有以下指定约束的代码:
因此,我为我的变量选择了相应的数据类型。 但是,我的代码使所有测试用例都失败,说分段错误。 (可能是因为他们输入的数组大小非常大。)有没有办法获得更多的堆栈空间或堆空间?或者通过以其他方式声明数组来解决这个问题?还有其他导致分段错误的原因吗?其他人已经解决了这个问题,所以一定有办法。
这是代码:
#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 // 这是 t
299701136 // 这是钱
2044 // 这是 n
50293811 136626876 58515785 59281065 .....永远持续下去......
【问题讨论】:
-
请添加错误检查。您的程序不检查 scanf 结果或 malloc 结果。如果任何事情失败了,你的整个程序就会爆炸。
-
大多数人更喜欢数组索引:
cost[-i]而不是指针杂耍:*(cost - i),主要是因为它更易于阅读。 -
你没有使用堆栈空间,malloc使用堆空间,如果你想使用堆栈空间你必须声明一个数组变量而不是malloc。
-
*(cost - i)看起来越界了。 -
成本 - 我。改变它
标签: c