C++ 内存错误:free():下一个大小无效(fast)

C++ 内存错误:free():下一个大小无效(fast),c++,memory,stl,stack-trace,push-back,C++,Memory,Stl,Stack Trace,Push Back,我正在尝试实现一个基数排序,此代码会导致内存故障: (free(): invalid next size (fast)) 代码如下: unsigned int * radix(unsigned int *x,int n, int g,bool verbose) { int elem_size = sizeof(unsigned int)*8; int mask = ((1<<g)-1); float num_rounds= ((float)elem_

我正在尝试实现一个
基数排序
,此代码会导致内存故障:

(free(): invalid next size (fast))
代码如下:

unsigned int * radix(unsigned int *x,int n, int g,bool verbose)
{
    int elem_size = sizeof(unsigned int)*8;
    int mask = ((1<<g)-1);    
    float num_rounds= ((float)elem_size/(float)g);
    int B = 1 << g; // 2^g BTW

    vector<unsigned int> buckets[B];

    // begin radix sort
    for( unsigned int round=0 ; round<num_rounds ; ++round)
      {

        // count
        for(int elem=0 ; elem<n ; ++elem)
        {
            // calculate the bucket number:
            unsigned int const bucket_num = ( x[elem] >> g*round) & mask;
    --->        buckets[bucket_num].push_back(x[elem]);
        }
        // more stuff
    }
    return x;
}

有什么想法吗?

从您的评论中可以清楚地看出:访问
未签名的int*x
是在
基函数中访问它时出现无效写入错误的原因

unsigned int*x=新的unsigned int(n)分配一个无符号整数,并为其赋值
n
。您确实需要一个无符号整数数组:
unsigned int*x=新的unsigned int[n]


一般来说,通过运行有助于找到内存泄漏以及问题的确切位置。因为,通常您收到的错误消息几乎不会发生在看似发生的行上。

//更多内容
实际代码?您需要包含所有代码。仅仅因为崩溃发生在一行上,并不意味着问题就出在这。//更多的内容是代码,但我的注释和错误remainI不知道为什么,但我将内存分配器从“newunsigned int(n)”更改为“malloc((n*sizeof(unsigned int))'它工作得很好。有什么合理的解释吗?@RSF在你原来的问题中没有一行出现。很难诊断你没有给我们看的代码中的问题。(旁白:我不认为
新的无符号int(n)
意味着你认为它有什么作用。)@AlanStokes ya!你是对的!匆忙是完美的敌人。。。
Breakpoint 1, radix (x=0x604010, n=50, g=4, verbose=true)
    at radix.mpi.seq.cpp:38
38                buckets[bucket_num].push_back(x[elem]);
2: B = 16
1: bucket_num = 2