2016-03-30 17 views
0

私はC++で挿入ソートを試みていますが、私の./a.outはこれを返します:* `./insertion 'のエラー:ダブルフリーまたは破損(out):0x000000000154fc20 *ダブルフリーまたは破損(アウト):C++の0x000000000154fc20

なぜこのようなことが起こっているのか分かりません。私はこのような他の問題を抱えています。それはいつもコードについてです。私のコードで購入してください。

これはコードです:あなたのコードのスニペットで

#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

を "と、それは、コードについては、常にだ" - はい、そうです。 –

+0

デバッガを使用することを学ぶ –

+0

Valgrindはここで助けになるでしょう。 -gでコンパイルしてください。 valgrind ./executable – PYA

答えて

0

、挿入中に()、定義により

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

whileループはときj<0またはv[j]>keyを終了します。 j<0で終了すると、v[j]=keyを割り当てると、本質的にv[-1]=keyであるため、メモリが破損します。

+0

礼拝のおかあさん –

-1

あなたはそのコードを修正するには、2つのオプションがあります。

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

私は気付かず、エラーについての通知のタイプも私には奇妙です.BTW私はC++をターミナルにプログラムし始めていますUbuntu、多分それが私がそれを理解していなかった理由です。ありがとうたくさん:D –

関連する問題