2012-10-31 35 views
2

我試圖使用Imebra在C++應用程序中使用Qt Creator作爲開發環境將dicom .dcm文件轉換爲.jpeg在Qt的C++應用程序的IImebra代碼給malloc:對象xxxxxx的***錯誤:指針被釋放未分配

我已經下載Imebra,並能運行Qt的項目例如,對於Dicom2Jpeg轉換成功。但是,當我試圖相同的代碼複製到我的C + +應用程序未能與以下錯誤味精運行:

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(); 

}

更深調試表明,錯誤的來源是JpegCodec.cpp文件readStream()功能檢查JpegSignature來看看它的格式錯誤,導致內部PUNTOEXE錯誤時,「檢測到的格式錯誤」。

有趣的是,當使用給定的dicom2jpeg示例(它具有完全相同的打開文件的代碼並加載它)運行相同的測試dcm文件時,不會出現錯誤併成功轉換爲jpeg。所以我知道這不是文件問題,但imebra代碼集成到我的C++應用程序的方式。

我的開發環境:的MacBook Pro與獅子OS,Qt Creator的,Qt工程,C++代碼,ITK庫增加,Imebra文件被完全集成爲Qt工程的一部分。

所以,我的問題是如何做我的工作/連接/參考/調用Imebra功能在Qt工程?我是否忘記鏈接某些內容,或者某個對象沒有按時實例​​化或刪除?

任何想法受到了高度評​​價,

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; 
+0

只有魔術師將能夠回答這個沒有看到任何代碼。 –

+0

1.您還沒有提出任何問題。我同意Nikos。沒有人可以在沒有看到相關代碼的情況下幫助你。 – Matt

+0

感謝您的快速回復。我只是添加了我的代碼。我不得不真的簡化它。我希望與Imebra一起工作的人員能夠解釋這個問題。 – user1288924

回答

0

錯誤「檢測到錯誤的格式」被拋出,因爲庫檢查對所有的文件格式的文件,因爲你正在閱讀一個DICOM文件,然後將JPEG代碼拋出一個異常,但是這應該被回收由編解碼器工廠。你可能是這個錯誤的受害者:https://bitbucket.org/puntoexe/imebra/issue/89/防止了DICOM編解碼器在啓動時靜態註冊,導致工廠編解碼器完全跳過了DICOM編解碼器。錯誤報告還包含一個解決方法。

+0

謝謝,謝謝,謝謝!我已將編解碼器工廠更改爲dicom編解碼器,並且它的工作原理類似於魅力。 – user1288924

+0

@ user1288924我的榮幸。你能接受答案嗎?謝謝 –

+0

@PaoloBrandoli如何使用帶有Environment XCode和iPhone 5設備的Imebra庫在iPhone上顯示圖像? –

相關問題