【发布时间】:2011-09-08 09:37:09
【问题描述】:
我使用 Qt (C++) 编写的应用程序中有内存泄漏。我怀疑问题出在那条线上。
for(int i=0; i<DATA_LENGTH;i++){
cdata1->replace(i,data->at(i));
}
cdata1 是一个 QVector,data 是一个 QList 。
我使用 replace() 的原因是,我有恒定长度的数据。而且我不想每次都创建一个 QVector。 QVector 在对象构造函数上用该行初始化:
cdata1 = new QVector<double>(DATA_LENGTH,0);
Qt 文档说
请注意,使用非常量运算符会导致 QVector 进行深度处理 复制。
我要问的是 replace() 函数是否会导致深层复制,或者我该如何理解?
【问题讨论】:
-
数据也在 cunstroctor 中初始化为: data = new QList
();它充满了双打 data.append(); -
我没有看到这里有泄漏,你是按值复制双精度的,没有泄漏。
-
我使用了纯 c++ 数组而不是 QVector。我已经写了而不是上面的代码: for(int i=0; i
at(i);现在我的问题解决了。所以我相信我的问题在于 QVector::replace().. -
-1 您声明“cdata1 是一个 QVector”,但是您正在执行
cdata1->,这表明 cdata1 是一个指针。这可以解释内存泄漏。我不赞成这个问题,因为提供不完整和误导性的信息不是提出问题的好方法。 -
抱歉,我没想到 :( 。无论如何感谢您的解决方案。但我仍然想知道为什么使用指针会导致这种情况?