ポインターのスタックのクリーニングにいくつか問題があります。以下の削除クラッシュのある行:「メモリ障害/セグメンテーション障害」。
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に任せてください。