2016-06-10 1 views
-1

Je suis assez nouveau pour les pointeurs et je suis assigné à faire cette tâche de doublage de tableau mais chaque fois que j'exécute mon code, j'obtiens une erreur Segmentation Fault (Core Dumped). Quelqu'un peut-il regarder mon code et me dire d'où vient l'erreur et ce que je peux faire pour y remédier?Erreur de segmentation (core Dumped) C++ - pointeurs

Je suis très coincé et toute aide serait grandement appréciée.

code:

    int size = length; 
        string *new_array = NULL; 
        string *tmp_array = new string[50]; 
        for(int k=0; k<50; k++)//Initial array copying. 
         tmp_array[k] = wordArray[k]; 

        for(int i=0; i<=1; i++)//Array range 0 to n-1 
        { 
         new_array = new string[size*2]; 
         for(int j=0; j<size; j++)//Array range 0 to n-1 
         { 
         new_array[j]=tmp_array[j]; 
         new_array[j+size]="empty"; 
         } 
         delete[] tmp_array; //Deleting old array 
         size=size*2; 
        } 
        delete[] tmp_array;// To free memory 
        cout<<new_array[x]<<endl; 

Il erreur est quelque part là-dedans. Il n'y a pas d'autre référence de pointeur dans le code.

Merci

+1

Votre première boucle 'for' aurait un dépassement de tampon. En outre, c'est trop compliqué pour allouer simplement plus d'espace pour un tableau. Deux appels à 'new []' pour le faire? Et pourquoi ne pas simplement utiliser 'std :: vector'? Dans tous les cas, veuillez poster un [mcve]. – PaulMcKenzie

+0

Préférez utiliser des pointeurs intelligents au lieu de pointeurs réguliers. Préférez 'std :: vector' aux tableaux dynamiques. –

+0

'pour (int i = 0; i <= 1; i ++) // plage de gamme 0 à n-1' le commentaire LIES! * LIIIIEEESSS! * Vous obtenez deux itérations: i = 0 et i = 1. Après i> 1 et sort. Sinon, lancez le débogueur de votre IDE et commencez à passer votre code. Quelques bonnes raisons de faire ceci: 1. Savoir comment utiliser les débogueurs vous fera gagner énormément de temps à long terme. 2. Cinq bucks indique que le débogueur vous montrera exactement où est le problème et, si vous jetez un oeil à l'état de vos variables quand cela arrive, exactement comment cela se passe. – user4581301

Répondre

0

Le problème est que vous essayez d'accéder tmp_array après qu'il a été delete d. Que se passe-t-il si `wordArray` a moins de 50 éléments?

for(int i=0; i<=1; i++)//Array range 0 to n-1 
{ 
    new_array = new string[size*2]; 
    for(int j=0; j<size; j++)//Array range 0 to n-1 
    { 
     new_array[j]=tmp_array[j]; 
     new_array[j+size]="empty"; 
    } 

    // The deleted tmp_array is used in the next iteration of the loop, 
    delete[] tmp_array; //Deleting old array 

    //=============================== 
    // Add this to fix the problem 
    //=============================== 
    tmp_array = new_array; 

    size=size*2; 
}