在此代码中获取运行时错误退出代码 1,它提供正确的输出并且在内存和时间限制内

Posted

技术标签:

【中文标题】在此代码中获取运行时错误退出代码 1,它提供正确的输出并且在内存和时间限制内【英文标题】:Getting run time error exit code 1 in this code which gives correct output and is within memory and time constraint 【发布时间】:2020-04-07 18:59:17 【问题描述】:

以下编写的代码在 VSC 中运行良好,但是在 codeforces 中提交时,我收到运行时错误退出代码 1。

问题链接:https://codeforces.com/problemset/problem/1326/B

    #include<stdio.h>


     void main()
     
        int n;
        scanf("%d\n",&n);
        int b[n],a[n],max=0,i;
        for(i=0;i<n;i++)
        
          scanf("%d",&b[i]);
        
        a[0]=b[0];
        a[1]=b[1]+a[0];
        max=a[1]>a[0]?a[1]:a[0];
        for(i=2;i<n;i++)
        
            a[i]=b[i]+max;
            max=a[i]>max?a[i]:max;
         
         for(i=0;i<n;i++)
             printf("%d ",a[i]);

    

对于自定义输入:

5

0 1 1 -2 1

输出:

0 1 2 0 3 

运行时错误:退出代码为 1

已使用:31 毫秒,0 KB

【问题讨论】:

正确定义main,看看你会得到什么stroustrup.com/bs_faq2.html#void-main 来自链接:Input 第一行包含一个整数 n (3≤n≤200000)。所以你在堆栈上制作了一些巨大的数组int b[n] ,a[n](可能)。请改用malloc @jiveturkey 你说定义不正确是对的,但这不会导致运行时错误。 好像有多个测试用例,而不是一个测试用例,所以代码需要循环,可能直到EOF。 由于 int b[n],a[n] 数组只分配一次,它们应该分配一个初始大小为最大大小的 I.E。 10^9 个条目。这意味着它们必须在堆中分配。 IE。通过malloc()calloc() 【参考方案1】:

由于输入可能非常大,当给定的n 的值非常大时,程序会导致分段错误。不要静态分配数组ab,而是使用malloc函数分配内存

int *a, *b;
a = (int *)malloc(sizeof(int) * n);
b = (int *)malloc(sizeof(int) * n);

另外,将 main 声明为 int main 并在末尾返回 0,而不是 void main

【讨论】:

从不强制转换 malloc 函数 谢谢。在我将 main 声明为 int main 且返回类型为 0 后它起作用了。但是为什么 void main 不起作用? 可能是因为测试站点使用的是现代编译器,而不是 Visual Studio 或 Visual C。

以上是关于在此代码中获取运行时错误退出代码 1,它提供正确的输出并且在内存和时间限制内的主要内容,如果未能解决你的问题,请参考以下文章

尝试安装项目依赖项时运行 npm i(退出代码 1)时发生错误

管道进入 grep -v 时获取退出代码 [重复]

尽管正确打印出所有输出,但程序未在 Java 中以退出代码 0 结束

Linux_进程终止(进程退出,进程等待(阻塞与非阻塞等待))

Composer 安装程序脚本未正确运行 [退出代码 1]

在线判断退出代码为 6 的运行时错误 [关闭]