Qt 删除或智能指针失败

Qt 删除或智能指针失败,qt,taglib,Qt,Taglib,我正在使用Taglib并将封面艺术写入mp3。下面的代码在这里起作用: bool MediaHelper::AddCoverArt(const QString &media, const QString &image_file) { TagLib::MPEG::File mpeg(media.toStdString().c_str()); TagLib::ID3v2::Tag *id3v2Tag = mpeg.ID3v2Tag(true); TagLi

我正在使用Taglib并将封面艺术写入mp3。下面的代码在这里起作用:

 bool MediaHelper::AddCoverArt(const QString &media, const QString &image_file)
 {
    TagLib::MPEG::File mpeg(media.toStdString().c_str());
    TagLib::ID3v2::Tag *id3v2Tag = mpeg.ID3v2Tag(true);
    TagLib::ID3v2::AttachedPictureFrame *frame = new TagLib::ID3v2::AttachedPictureFrame;
    frame->setMimeType("image/jpeg");
    frame->setPicture(image.data());
    id3v2Tag->addFrame(frame);
    mpeg.save();
    delete frame;
    return true;
}
但一旦我离开该功能,应用程序就会因读访问冲突而崩溃

然后我用QScopedPointer试了一下:

 bool MediaHelper::AddCoverArt(const QString &media, const QString &image_file)
 {  
    TagLib::ID3v2::Tag *id3v2Tag = mpeg.ID3v2Tag(true);
    QScopedPointer<TagLib::ID3v2::AttachedPictureFrame> frame(new TagLib::ID3v2::AttachedPictureFrame);
    frame->setMimeType("image/jpeg");
    frame->setPicture(image.data());
    id3v2Tag->addFrame(frame.data());
    mpeg.save();    
    return true;
}
boolmediaheloper::AddCoverArt(const-QString&media,const-QString&image\u文件)
{  
TagLib::ID3v2::Tag*id3v2Tag=mpeg.id3v2Tag(true);
QScopedPointer帧(新的TagLib::ID3v2::AttachedPictureFrame);
frame->setMimeType(“图像/jpeg”);
frame->setPicture(image.data());
id3v2Tag->addFrame(frame.data());
mpeg.save();
返回true;
}

但当我离开函数时,同样的事情也会发生。我有点困惑,因为如果我不注意删除帧,那么我会给自己制造一个大问题。如果有人能给我一些见解。

来自TagLib API文档:

void TagLib::ID3v2::Tag::addFrame(Frame*Frame)

将框架添加到标记中。此时,标记将获得框架的所有权 并将释放其内存


标记负责删除帧。如果您自己也删除了帧,则会导致双重删除,如果标记在析构函数中删除帧之前访问该帧,也会导致访问冲突。

来自TagLib API文档:

void TagLib::ID3v2::Tag::addFrame(Frame*Frame)

将框架添加到标记中。此时,标记将获得框架的所有权 并将释放其内存


标记负责删除帧。如果您自己也删除了帧,则会导致双重删除,如果标记在析构函数中删除帧之前访问了帧,则也会导致访问冲突。

谢谢,我查看了文档说明,但没有查看函数。谢谢你为我清理我看了文档描述,但没有看功能。谢谢你帮我清理