我收到一个断言错误,但是当我编写 cout 语句时,它会消失



>我收到断言错误,但是当我编写cout语句时,它消失了。

错误:

a.out: malloc.c:2427: sysmalloc: 断言 '(old_top == initial_top (av( && old_size == 0( ||((无符号长( (old_size(>= MINSIZE && prev_inuse (old_top( && ((未签名长( old_end & (pagesize - 1(( == 0(' 失败。已中止(核心已转储(

当我在主要 cout 语句中发表评论时,它工作正常。

输出: 你好排序成功。

这里是代码链接: https://pastebin.com/ULNZ8RyH

#include<bits/stdc++.h>
using namespace std;
/*
Create a randomly shuffled array with distinct of size (size), containing value sfrom 0 to size-1.
Input:
size: (int) size of the array
Return Value:
vector<int> : A vector of ints with size (size).
*/
vector<int> createArrayDistinct(int size)
{
vector<int> array(size);
for(int i = 0; i < size; i++)
{
array[i] = i;
}
random_shuffle(array.begin(), array.end());
return array;
}
vector<int> counting_sort_v1(vector<int> array, int K){
int N = array.size();
vector<int> pos(N);
vector<int> output(N);
for(int i = 0; i < N ; i++)
{
pos[i] = 0;
}
for(int i = 0; i < N; i++)
{
pos[array[i]]++;
}
for(int i = 0; i < K; i++)
{
if(i)
pos[i] = pos[i] + pos[i-1];
}
for(int i = N - 1; i >= 0; i--)
{
output[pos[array[i]]] = array[i];
pos[array[i]]--;
}
return output;
}
vector<int> counting_sort_v2(vector<int> array, int K){
int N = array.size();
vector<int> pos(N);
vector<int> output(N);
for(int i = 0; i < N ; i++)
{
pos[i] = 0;
}
for(int i = 0; i < N; i++)
{
pos[array[i]]++;
}
int sum = N;
for(int i = K-1; i >= 0; i--)
{
pos[i] = sum - pos[i];
sum = pos[i];
}
for(int i = 0; i < N; i++)
{
output[pos[array[i]]] = array[i];
pos[array[i]]++;
}
return output;
}
bool check_sort(vector<int> array){
for(int i = 0; i < array.size()-1; i++)
{
if(array[i] > array[i+1])
return false;
}
return true;
}
int main()
{
int size =  10;
//cin>>size;
vector<int> array = createArrayDistinct(size);
//cout<<"hello";
vector<int> output = counting_sort_v1(array,size);
if(check_sort(output))
cout<<"Sort Successful.";
else
cout<<"Sort Unsuccessful.";
}   

counting_sort_v2函数中 您到达以下循环:

for(int i = 0; i < K; i++)
{
if(i)
pos[i] = pos[i] + pos[i-1];
}

pos: (

1,1,1,1,1,1,1,1,1,1,1(循环后 POS 为:(1,2,3,4,5,6,7,8,9,10(

因此,在最后一个循环中,pos(10( 的最后一个元素的output[pos[array[i]]]将脱离向量边界。

最新更新