2016-06-10 7 views
-1

Ich bin ziemlich neu zu Zeigern und ich bin zugewiesen, um diese Array-Doubling-Aufgabe zu tun, aber jedes Mal, wenn ich meinen Code ausführen bekomme ich eine Segmentation Fault (Core Dumped) -Fehler. Kann jemand meinen Code ansehen und mir sagen, woher der Fehler kommt und was ich tun kann, um es zu beheben?Segmentierungsfehler (Core Dumped) C++ - Zeiger

Ich bin sehr fest und jede Hilfe würde sehr geschätzt werden.

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; 

Es Fehler ist irgendwo da drin. In keinem Code ist eine andere Verweisadresse enthalten.

Dank

+1

Was ist, wenn 'wordArray' weniger als 50 Elemente enthält? Ihre erste For-Schleife würde einen Pufferüberlauf haben. Außerdem ist dies zu kompliziert, um einfach mehr Platz für ein Array zuzuordnen. Zwei Aufrufe an 'new []', dies zu tun? Und warum nicht einfach 'std :: vector' verwenden? Bitte posten Sie auf jeden Fall einen [mcve]. – PaulMcKenzie

+0

Verwenden Sie lieber Smartpointer anstelle von normalen Pointern. Bevorzugen Sie 'std :: vector' zu dynamischen Arrays. –

+0

'für (int i = 0; i <= 1; i ++) // Array-Bereich 0 bis n-1 der Kommentar LIES! * LIIIIEEESSS! * Sie erhalten zwei Iterationen: i = 0 und i = 1. Nach als i> 1 und beendet. Ansonsten starten Sie den Debugger Ihrer IDE und beginnen Sie, Ihren Code durchzugehen. Ein paar gute Gründe, dies zu tun: 1. Wenn Sie wissen, wie Sie Debugger verwenden, sparen Sie auf lange Sicht viel Zeit. 2. Fünf Dollar sagt der Debugger wird Ihnen genau zeigen, wo das Problem ist und, wenn Sie einen Blick auf den Zustand Ihrer Variablen, wenn es passiert, genau, wie es passiert. – user4581301

Antwort

0

Das Problem ist, dass Sie tmp_array zuzugreifen versuchen, nachdem es delete d gewesen ist.

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; 
} 
Verwandte Themen