2016-03-30 8 views
0

Ich versuche Insertion Sortierung über Vektoren in C++, aber meine ./a.out gibt dies zurück: * Fehler in `./Insertion ': doppelt frei oder Korruption (out): 0x000000000154fc20 *Double Free oder Korruption (out): 0x000000000154fc20 in C++

Ich weiß nicht, warum das passiert, ich habe andere Probleme wie diese gesehen und es geht immer um den Code, kaufen in meinem Code Ich weiß nicht, was das Problem ist.

Dies ist der Code:

#include<iostream> 
#include<vector> 

using namespace std; 


void insertion(vector<int> v){ 
    int tam = v.size(); 
    int key,j,i; 
    for(i=1; i<tam; i++){ 
    key = v[i]; 
    j=i-1; 
    while(j>=0 && v[j]>key){ 
     v[j+1] = v[j]; 
     j--; 
    } 
    v[j]=key; 
    } 
} 

void print(vector<int> v){ 
    cout<<endl; 
    for(int i = 0; i<v.size(); i++){ 
    cout<<i+1<<".\t"<<v[i]<<"\n"; 
    } 
} 

int main(){ 
    cout<<"----------------INSERTION SORT----------------\n\n"; 
    cout<<"\nPlease, fill the vector: \n\n"; 
    vector<int> v; 
    int a; 
    bool response = true; 

    while(response){ 
     cout<<"\nEnter your number: "; 
     cin>>a; 
     v.push_back(a); 
     cout<<"Another?(1/0): "; 
     cin>>response; 
     cout<<endl; 
    } 
    insertion(v); 
    print(v); 

    return 0; 
} 
+2

"und es ist immer über den Code" - ja, es ist. –

+0

lernen, einen Debugger zu verwenden –

+0

Valgrind wird hier helfen. kompilieren mit -g und tun valgrind ./executable – PYA

Antwort

0

In diesem Schnipsel des Codes, in Insertion(),

j=i-1; 
while(j>=0 && v[j]>key){ 
    v[j+1] = v[j]; 
    j--; 
} 
v[j]=key; 

Per Definition wird die Schleife, wenn whilej<0 oder v[j]>key beenden. Wenn es beendet wird, weil j<0, das Zuweisen v[j]=key Speicher beschädigt, da es im Wesentlichen v[-1]=key ist.

+0

Danke für die Umsetzung –

-1

Sie haben zwei Möglichkeiten, dass Code zu beheben:

1)

j=i-1; 
    while(j>=0 && v[j]>key){ 
     v[j+1] = v[j]; 
     j--; 
    v[j]=key; 
    } 

2)

j=i-1; 
    while(j>=0 && v[j]>key){ 
     v[j+1] = v[j]; 
     j--; 
    } 
    v[j+1]=key; 
+0

Ich habe das nicht bemerkt, auch ist es sehr seltsam für mich diese Art der Benachrichtigung über einen Fehler, BTW ich fange an, C++ im Terminal von zu programmieren Ubuntu, vielleicht habe ich das deshalb nicht verstanden. Vielen Dank: D –

Verwandte Themen