2016-03-30 13 views
0

C++ 'da vektörler üzerinden ekleme sıralama yapmaya çalışıyorum ama benim ./a.out bunu döndürür: *. \ Inertion'da hata: çift serbest veya bozulma (dışarı): 0x000000000154fc20 *Double Free veya Corruption (out): C++ içinde 0x000000000154fc20

Bunun nedenini bilmiyorum, bunun gibi başka sorunlar gördüm ve her zaman kodla ilgili, kodumdan satın al, sorunun ne olduğunu bilmiyorum.

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

Tanım olarak, while döngü zaman sona erer, için bu kod snippet'inde

#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

"ve kod olan hep" - evet, öyle. –

+0

hata ayıklayıcısını kullanmayı öğrenmek –

+0

Valgrind burada yardım edecek. -g ile derleyin ve valgrind yapın ./executable – PYA

cevap

0

, ekleme bölgesi() j<0 veya v[j]>key:

Bu

kodudur. j<0, v[j]=key atanması nedeniyle sonlandırıldığında, temelde v[-1]=key olduğu için bellek bozulur.

+0

Acuration –

-1

İki o kodu düzeltmek için seçenekler vardır:

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

için teşekkürler Bunu fark etmedim, aynı zamanda bu hata hakkında bir bildirim bildirmek çok garip, btw terminalinde C++ programlamaya başladım Ubuntu, belki de bu yüzden anlamadım. Çok teşekkürler: D –