2016-03-31 1 views
0

Mon code fonctionne bien dans les blocs de code, mais, quand je l'envoie, il montre runtime sigabrt erreur, que signifie cette erreur?erreur d'exécution (SIGABRT) - SPOJ

Lorsque j'initialise la taille du tableau de pointeurs en 200 cela fonctionne bien mais je veux savoir quelle est cette erreur?

lien pour la question est: http://www.spoj.com/problems/FCTRL2/

Voici le 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 = new int [0]; nums [0] = 1; '- Soit vous n'avez pas vu cette erreur évidente, soit vous écrivez simplement du code et vous n'apprendrez pas la langue, juste pour la soumettre à SPOJ. – PaulMcKenzie

+0

Non monsieur je demande quel type d'erreur est ce sigabrt ... Et comment il est lié à nums [0] –

+0

Vous créez un tampon 0-élément, accédant ainsi à n'importe quel élément dans 'nums', y compris l'élément 0, est un comportement indéfini. – PaulMcKenzie

Répondre

2

changement int *nums = new int[0];-int *nums = new int[x], où x est la taille maximale du tableau (en fonction du nombre de chiffres que vous êtes s'attendant à la factorielle). Selon les contraintes (1 <= n <= 100) Une valeur appropriée de xwould be158.

int *nums = new int[n] alloue de la mémoire pour un tableau d'éléments n.