【发布时间】:2016-03-31 14:15:21
【问题描述】:
我的代码在代码块中运行良好,但是当我提交时显示runtime sigabrt 错误,这个错误是什么意思?
当我将指针数组的大小初始化为 200 时,它工作正常,但我想知道这是什么错误?
问题链接是:http://www.spoj.com/problems/FCTRL2/
代码如下:
#include <iostream>
using namespace std;
void multiply(int x,int *nums,int &len){
int carry=0;
int prod;
for (int j=0;j<len;j++){
prod=nums[j]*x+carry;
carry=prod/10;
nums[j]=prod%10;
}
while (carry){
nums[len]=carry%10;
carry=carry/10;
len++;
}
}
int main()
{
int t,n;
cin>>t;
int arr[100];
for (int i=0;i<t;i++){
cin>>arr[i];
}
for (int i=0;i<t;i++){
n=arr[i];
if (n==0){cout<<0<<endl;}
else{
int *nums= new int[0];
nums[0]=1;
int len=1;
for (int i=2;i<=n;i++){
multiply(i,nums,len);
}
for (int i=len-1;i>=0;i--){
cout<<nums[i];
}
cout<<endl;}
}
return 0;
}
【问题讨论】:
-
int *nums= new int[0]; nums[0]=1;-- 要么你没有看到这个明显的错误,要么你只是在写代码而不是学习语言,只是为了提交给 SPOJ。 -
不,先生,我在问这个 sigabrt 是什么类型的错误......以及它与 nums[0] 的关系
-
您正在创建一个 0 元素缓冲区,因此访问
nums中的任何元素,包括元素 0,都是未定义的行为。