вектор — Double Free или коррупция (выход): 0x000000000154fc20 в переполнении стека

я пытаюсь сделать вставку сортировки по векторам в C ++, но мой ./a.out возвращает это: * Ошибка в `./insertion ‘: двойное освобождение или повреждение (нет): 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;
}

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)

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;
-1

По вопросам рекламы [email protected]