0

我在清理一堆指针时遇到了一些问题。在下面删除崩溃的行中:“内存错误/分段错误”。

std::stack<reports*> stack;
while(db.fetch())
{
    reports* report = new report(db);
    QThreadPool::globalInstance()->start(report);
    stack.push(report);
}
while( QThreadPool::globalInstance()->activateThreadCount() != 0 );

while( !stack.empty() )
{
    delete stack.top();
    stack.pop();
}

我认为这段代码的上下文不相关。除了: db 通过引用传递给报告构造函数,该构造函数立即将必要的当前行数据复制为非指针成员。有人可以给我一个提示吗?

编辑:

自我回答:

好的,在写完我的问题后,我被上帝之光感动了。

默认

QThreadPool::globalInstance()->start(report);

将取得该对象的所有权。在循环中添加以下行可以解决问题:

report->setAutoDelete(false);

或者只是不清理......我自己让 Qt 去做。

4

3 回答 3

1

好的,在写完我的问题后,我被上帝之光感动了。

默认

QThreadPool::globalInstance()->start(report);

将取得该对象的所有权。在循环中添加以下行可以解决问题:

report->setAutoDelete(false);

或者只是不清理......我自己让 Qt 去做。

于 2013-08-08T08:45:54.980 回答
0

您可以做两件事来避免显式内存消耗,并解决您的问题:

  • 使用智能指针
  • 使用参考。在堆栈的情况下,STL 容器的要求之一是元素必须是可复制的。您可以使用std::ref包装引用来解决这个问题。

在这种情况下,我认为使用std::shared_ptr是最好的方法。

于 2013-08-08T08:46:21.150 回答
-1

我认为我们需要查看报告类,显然您正在处理好堆栈,因此当您尝试删除它们时,问题一定出在报告(堆栈顶部)。

检查/创建报告析构函数,你必须在那里处理一些东西

于 2013-08-08T08:47:18.830 回答