【发布时间】:2017-04-10 15:17:58
【问题描述】:
我正在尝试使用 Qt5 C++ 中的 TagLib 库 (1.11.1) 制作音乐播放器。我打开了多个文件并阅读了标签。我遇到了两个困难。打开文件并读取标签后,我无法关闭文件并释放文件占用的内存。我使用delete 来释放内存并关闭文件。但是当我尝试这个时,程序崩溃了。这是我的程序的片段代码:
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:无法打开文件 song.mp3
有没有办法解决内存泄漏和关闭打开的文件?
当我使用delete file; 运行调试时,我看到了这条消息:
下级停止了,因为它收到了来自操作系统的信号。
信号名称:SIGSEGV
信号含义:分段错误
【问题讨论】:
-
你能在崩溃后给我们调试器输出吗? (堆栈溢出?访问错误,堆损坏崩溃?)
-
对不起@Raxvan ...这是我第一次发布问题。我已经添加了调试结果。
标签: c++ qt memory-management crash taglib