带有QT的C 应用中的IIMEBRA代码给出malloc:***对象XXXXXX的错误:未分配释放的指针



我正在尝试使用QT Creator作为开发环境中的C 应用中使用iMebra将DICOM .dcm文件转换为.jpeg

我已经下载了Imebra,并且能够成功地为DICOM2JPEG转换运行QT项目示例。但是,当我尝试将相同的代码复制到我的C 应用时,它无法运行以下错误msg:

malloc: *** error for object xxxxxx: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug

我遵循了在Imebra网站上显示的项目中添加Imebra文件的步骤。还以他们的QT项目为例。我的main.cpp打开DICOM文件,然后将其加载到数据集,然后调用我的对话框窗口。它在加载数据集上崩溃。

#include "QApplication.h"
#include "QHBoxLayout.h"
#include "mydialog.h"
#include "iostream.h"
include "library/imebra/include/imebra.h"
int main( int argc, char ** argv ){
    using namespace puntoexe;
    ptr<stream> readStream(new stream);
    readStream->openFile("/pathToDcmFile/test.dcm",std::ios_base::in);
    ptr<streamReader> reader(new streamReader(readStream));
    ptr<imebra::codecs::codecFactory> 
    cFactory(imebra::codecs::codecFactory::getCodecFactory());
    ptr<imebra::dataSet> tdataSet;
    tdataSet=cFactory->load(reader,2048);
    Q_INIT_RESOURCE(images);
    QApplication a( argc, argv );
    MyDialog md;
    md.show();
    return a.exec();

}

更深入的调试显示,在检查jpegsignature时,JpegCodec.cpp文件 readStream()函数中的错误源是在查看是否处于错误格式的情况下,导致内部puntoexe错误"检测到错误的格式"。

有趣的是,使用给定的DICOM2JPEG示例运行相同的测试DCM文件(在打开文件和加载的代码完全相同的代码)中没有任何错误,并且成功地转换为JPEG。所以我知道这不是文件问题,而是Imebra代码集成到我的C 应用程序中的方式。

我的开发环境:带有狮子OS,QT创建者,QT项目,C 代码的MacBook Pro,添加了ITK库,IMEBRA文件已完全集成为QT项目的一部分。

那么,我的问题是如何在QT项目中工作/链接/参考/调用Imebra功能?我是否忘记链接某些东西,或者某些对象未按时实例化/删除?

任何想法都得到高度赞赏,

evushka

解决方案:正如建议的那样,我将编解码器工厂更改为DICM工厂,并解决了问题。我的新代码在下面给出。

imebra::codecs::dicomCodec* pTmp = new imebra::codecs::dicomCodec();
ptr<stream> readStream(new stream);
readStream->openFile(argv[0],std::ios_base::in);
ptr<streamReader> reader(new streamReader(readStream));
ptr<imebra::dataSet> tdataSet;
tdataSet=pTmp->read(reader,2048);
delete pTmp;

错误"检测到错误的格式"被抛出,因为库对所有文件格式检查文件,并且由于您正在读取DICOM文件,然后JPEG代码会引发例外,但是这应该由编解码器工厂恢复。您可能是此错误的受害者:https://bitbucket.org/puntoexe/imebra/issue/89/,它阻止了DICOM编解码器在启动时静态注册,从而使工厂编解码器完全跳过DICOM Codec。该错误报告还包含解决方法。

相关内容

  • 没有找到相关文章

最新更新