分配期间内存损坏错误
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++) {
...
}
我在 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++) {
...
}