首页 > 解决方案 > 大数组导致分段错误

问题描述

我编写了具有以下指定约束的代码:

在此处输入图像描述

因此,我相应地为我的变量选择了数据类型。但是,我的代码使所有测试用例都失败,说分段错误。(可能是因为他们输入的数组大小非常大。)有没有办法获得更多的堆栈空间或堆空间?或者通过以其他方式声明数组来解决这个问题?还有其他导致分段错误的原因吗?其他人已经解决了这个问题,所以一定有办法。

这是代码:

#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 .....永远持续下去......

标签: c

解决方案


有很多复杂的代码要分析,所以我不会给你一条鱼,而是给你一根鱼竿。

无论您使用什么平台、编译器和 IDE,都可能有一种方法可以在运行时对您的程序进行逐步调试。也许您的假设是错误的,并且分配大小不会导致此问题。

学习调试的基础知识是程序员手中真正的好工具。这是一个示例教程视频:https ://www.youtube.com/watch?v=9gAjIQc4bPU


推荐阅读