C++ 我得到一个断言错误,但当我写cout语句时,它消失了

C++ 我得到一个断言错误,但当我写cout语句时,它消失了,c++,c++11,C++,C++11,我得到了一个断言错误,但当我写一个cout语句时,它就消失了 错误: a、 out:malloc.c:2427:sysmalloc:Assertion`(old\u top==initial\u top) (av)和旧尺寸==0)| |((无符号长)(旧尺寸)>=MINSIZE&& 上一个使用(旧的顶部)和((无符号长的)旧的结束和(页面大小-1))== “0)”失败。中止(堆芯转储) 当我在cout语句中主要进行评论时,效果很好 输出: helloSort成功了 这里是代码链接: #包括 使

我得到了一个断言错误,但当我写一个cout语句时,它就消失了

错误:

a、 out:malloc.c:2427:sysmalloc:Assertion`(old\u top==initial\u top) (av)和旧尺寸==0)| |((无符号长)(旧尺寸)>=MINSIZE&& 上一个使用(旧的顶部)和((无符号长的)旧的结束和(页面大小-1))== “0)”失败。中止(堆芯转储)

当我在cout语句中主要进行评论时,效果很好

输出: helloSort成功了

这里是代码链接:

#包括
使用名称空间std;
/*
创建一个大小(size)不同的随机无序数组,其中包含从0到size-1的值。
输入:
size:(int)数组的大小
返回值:
向量:大小为(size)的整数向量。
*/
矢量createArrayDistinct(整数大小)
{
矢量阵列(大小);
对于(int i=0;i=0;i--)
{
输出[pos[array[i]]]=array[i];
pos[array[i]]--;
}
返回输出;
}
向量计数\排序\ v2(向量数组,int K){
int N=array.size();
向量pos(N);
矢量输出(N);
对于(int i=0;i=0;i--)
{
pos[i]=和-pos[i];
总和=位置[i];
}
对于(int i=0;i数组[i+1])
返回false;
}
返回true;
}
int main()
{
int size=10;
//cin>>尺寸;
向量数组=createArrayDistinct(大小);

//cout在
计数\排序\ v2
功能中 到达以下循环:

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

循环后的位置为:(1,2,3,4,5,6,7,8,9,10)

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

请创建一个.Ps,您的代码不是最小的,我怀疑有数组越界访问。尝试使用valgrind运行该程序
for(int i = 0; i < K; i++)
{
    if(i)
        pos[i] = pos[i] + pos[i-1];
}