Код IImebra в приложении C ++ с Qt выдает malloc: *** ошибка для объекта xxxxxx: освобожденный указатель не выделен

Я пытаюсь конвертировать диком .dcm подать в .jpeg использование Imebra в приложении C ++ с использованием Qt Creator в качестве среды разработки.

Я скачал 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 «обнаружил неправильный формат».

Интересно, что при запуске одного и того же тестового файла dcm с использованием данного примера dicom2jpeg (который имеет точно такой же код открытия и загрузки файла), не выдает ошибок и успешно конвертируется в jpeg. Так что я знаю, что проблема не в файле, а в том, как код imebra интегрируется в мое приложение C ++.

Моя среда разработки: MacBook Pro с Lion 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;

2

Решение

Выдается ошибка «обнаружен неправильный формат», поскольку библиотека проверяет файл на соответствие всем форматам файлов, и поскольку вы читаете файл Dicom, код Jpeg вызывает исключение, но это должно быть восстановлено фабрикой кодеков. Вы можете стать жертвой этой ошибки: https://bitbucket.org/puntoexe/imebra/issue/89/ что препятствует статической регистрации кодека Dicom при запуске, в результате чего заводской кодек полностью пропускает кодек Dicom. Отчет об ошибке также содержит обходной путь.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector