我試圖使用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;
只有魔術師將能夠回答這個沒有看到任何代碼。 –
1.您還沒有提出任何問題。我同意Nikos。沒有人可以在沒有看到相關代碼的情況下幫助你。 – Matt
感謝您的快速回復。我只是添加了我的代碼。我不得不真的簡化它。我希望與Imebra一起工作的人員能夠解釋這個問題。 – user1288924