在此代码中获取运行时错误退出代码 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
的值非常大时,程序会导致分段错误。不要静态分配数组a
和b
,而是使用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)时发生错误
尽管正确打印出所有输出,但程序未在 Java 中以退出代码 0 结束