测试用例中的分段错误

时间:2016-01-26 09:33:18

标签: c arrays segmentation-fault

所以,问题如下: 给定任何数组(相当大)的整数,返回数组中任何两个元素之间的最大差异,使得较大的元素出现在比较小的元素更高的索引处。如果没有找到这样的对,则返回-1。 例如:

7 2 3 10 2 4 8 1

其中第一个元素是数组的大小(或输入的行数),其余的是元素。 对于上述情况,样本输出为8(10-2)。

我的代码如下:

int A[20],size;

scanf("%d",&size);
for(int i=0;i<size;i++){
scanf("%d\n",&A[i]);
}
int diff = A[1]-A[0];
int currsum = diff;
int maxsum = currsum;

for(int i=1; i<size-1; i++)
{
    // Calculate current difference for the loop
    diff = A[i+1]-A[i];

    // Calculate current sum for the loop
    if (currsum > 0)
       currsum += diff;
    else
       currsum = diff;

    // Update max sum(if needed)
    if (currsum > maxsum)
       maxsum = currsum;
}

printf("%d",maxsum);

这是来自Hackerrank的一个问题,但它仅适用于10个可能的测试用例中的三个。其余案例返回分段错误。任何想法都会有所帮助。

2 个答案:

答案 0 :(得分:1)

如评论中所述,您已声明A仅包含20个整数。但问题可以发送多达1,000,000个整数。这是错误的!

答案 1 :(得分:0)

使用指针使这一点变得更加重要。首先声明A作为整数的指针,然后,读取数组的第一个元素,使用此整数,您可以为您的数组{{1}动态分配内存(malloc()calloc()函数) }}。因此A的大小将是动态的,您可以根据第一个元素调整大小。