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的时候
答案 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++) {
...
}