分配期间内存损坏错误

时间:2015-03-13 18:44:42

标签: c++ qt heap-memory dynamic-memory-allocation

C++中使用QT的代码在我浏览此部分代码时出现memory corruption错误:

 for (int vid=0;vid<m_trajs.size();vid++)
{
    QVector<int*> clusterIDs_foronevideo;
    for (int level=0;level<nbClusters.size();level++)
    {

        int* clusterIDs_atonelevel = new int [long_vals[vid]];
        for (int ind=0;ind<stInd[vid];ind++)
        {

            clusterIDs_atonelevel[ind] = clusterIDs[level][ind];

        }

        clusterIDs_foronevideo << clusterIDs_atonelevel;


    }
    m_clusterIDs << clusterIDs_foronevideo;

}

long_vals只是一个数组,在每个处理级别保存我的ID。 我在for loop的第一次迭代中没有出现错误,就像在vid = 5中一样。我也在此行clusterIDs_foronevideo << clusterIDs_atonelevel;之后使用了删除,但在删除时我也遇到了错误。 我的代码有什么问题,但我想分配的大小也很小。 这是在命令行中显示的错误

malloc(): memory corruption: 0x0000000000cd5e00 *** 

这是我在这里不使用malloc的时候

1 个答案:

答案 0 :(得分:1)

问题很可能是你分配long_vals[vid]个数量的int,但是然后循环stInd[vid]次。如果后者比前者大,那么您将访问分配区域之外的内存,并且您可能会覆盖另一个malloc区域使用的内存。

您应该执行以下操作:

int count = stInd[vid];
// Or maybe: int count = long_vals[vid];
int* clusterIDs_atonelevel = new int[count];
for (int ind=0; ind<count; ind++) {
    ...
}