CodeChef运行时错误(sigsegv)

时间:2018-08-12 15:21:47

标签: c arrays

CodeChef问题:

Shivam是世界上最年轻的程序员,他只有12岁。 Shivam正在学习编程,今天他正在编写他的第一个程序。

程序非常简单,给定两个整数A和B,编写一个程序将这两个数字相加。

输入 第一行包含一个整数T,即测试用例的总数。然后跟随T行,每行包含两个整数A和B。

输出 添加A和B并显示它。

约束 1≤T≤1000 1≤A,B≤10000 例 输入项 3 1 2 100 200 10 40

输出 3 300 50

#include <stdio.h>
int main()
{
    int T, A, B, i, sum[T];
    scanf("%d", &T);
    for(i=0;i<T;i++)
        {
            scanf("%d",&A);
            scanf("%d",&B);
            sum[i]=A+B;
        }

    for(i=0;i<T;i++)
    {
        printf("\n%d", sum[i]);
    }

}

错误 运行时错误SIGSEGV-我搜索了它,它说数组超出范围。

3 个答案:

答案 0 :(得分:1)

声明T时,

sum[T]的值不确定。而是:

int main()
{
    int T, A, B, i;
    scanf("%d", &T);
    int sum[T];
    for(i=0;i<T;i++) ...

您应该检查scanf的返回值。

答案 1 :(得分:1)

如果要分配内存运行时间(在程序执行期间),则使用诸如“ malloc”之类的函数会更合适。这是一个简短的示例。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int T, A, B, i;
    int *sum;

    scanf("%d", &T);
    if (T <= 0) /*Check if the value of T is appropriate*/
    {
        fprintf(stderr, "Invalid argument T!\n");
    }

    /* Dynamically allocate the memory */
    sum = (int *)malloc(sizeof(int)*T);
    if (sum == NULL)
    {
        fprintf(stderr, "Failed to allocate memory!\n");
    }

    for(i=0;i<T;i++)
    {
            scanf("%d",&A);
            scanf("%d",&B);
            sum[i]=A+B;
        }

    for(i=0;i<T;i++)
    {
        printf("\n%d", sum[i]);
    }

    /* Free the allocated memory once you are not needing it anymore in 
    order to avoid memory leaks */
    free(sum);

    return (0);
}

注意:这只是一个示例,说明如何避免运行时错误,我没有仔细研究与for循环相关的其余逻辑。

答案 2 :(得分:0)

取T的输入值后声明sum [T]

相关问题