Qt5 C++でTagLibライブラリ(1.11.1)を使用して音楽プレーヤーを作成しようとしています。私は複数のファイルを開いてタグを読んだ。そして私は2つの困難で遭遇しました。ファイルを開いてタグを読み取った後、ファイルを閉じずにファイルが占有していたメモリを解放することができませんでした。私はdelete
を使ってメモリを解放し、ファイルを閉じました。しかし、これを試すと、プログラムがクラッシュします。ここに私のプログラムのスニップコードは次のとおりです。TagLib :: Fileを破棄するときにTagLibがクラッシュし、開けなかったTagLib :: File
QString audioPath("song.mp3")
auto file = new MPEG::File(audioPath.toStdWString().c_str());
if (file->isOpen()) {
auto tag = file->ID3v2Tag();
if (tag) {
//read audio tags
}
}
delete file;
私は
delete file;
を削除すると、それは完璧に動作しますが、複数のファイルを開いたときに特殊なメモリリークがあります。ファイルを開いた場合、プログラムを終了せずに開いたファイルを閉じる方法がないため、もう一度開くことができませんでした。そして、このエラーで私の葉:開かれたファイルをメモリリークを解決し、閉鎖する方法は
TagLib: Could not open file song.mp3
ありますか?
The inferior stopped because it received a signal from the operating system.
Signal name: SIGSEGV
Signal meaning: Segmentation fault
クラッシュ後にデバッガの出力を教えてもらえますか? (スタックオーバーフロー?不正アクセス、ヒープ崩壊のクラッシュ?) – Raxvan
申し訳ありません@Raxvan ...質問を投稿するのは初めてのことです。デバッグ結果を追加しました。 –