分配期间内存损坏错误

memory corruption error during 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; 之后使用了 delete,但是我在删除时也遇到了错误。 我的代码有什么问题,但是我想要分配的大小也很小。 这是命令行中出现的错误

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

这是我在这里没有使用 malloc 的时候

问题很可能是您分配了 long_vals[vid] 个整数,但随后循环了 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++) {
    ...
}