2016-03-31 5 views
0

Mein Code läuft gut in Codeblöcken, aber, wenn ich es übergebe zeigt runtime sigabrt Fehler, was bedeutet dieser Fehler?Laufzeitfehler (SIGABRT) - SPOJ

Wenn ich die Größe des Zeigerarrays als 200 initialisiere, funktioniert es gut, aber ich möchte wissen, was ist dieser Fehler?

Link für Frage ist: http://www.spoj.com/problems/FCTRL2/

Hier ist der Code:

#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; 
} 
+0

'int * nums = neu int [0]; nums [0] = 1; '- Entweder du hast diesen offensichtlichen Fehler nicht gesehen, oder du schreibst nur Code und lernst die Sprache nicht, nur um sie SPOJ zu übergeben. – PaulMcKenzie

+0

Nein Sir, ich frage, welche Art von Fehler ist diese sigabt ... Und wie es mit nums zusammenhängt [0] –

+0

Sie erstellen einen 0-Element-Puffer und damit Zugriff auf ein beliebiges Element in 'nums', einschließlich Element 0, ist undefiniertes Verhalten. – PaulMcKenzie

Antwort

2

ändern int *nums = new int[0];-int *nums = new int[x], wo x die maximale Größe des Arrays ist (abhängig von der Anzahl der Stellen, du bist erwartet in der Fakultät). Gemäß den Beschränkungen (1 <= n <= 100) Ein geeigneter Wert von xwould be158.

int *nums = new int[n] reserviert Speicher für ein n Elementarray.