исключение при назначении строки из GDCM - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть приложение Qt, которое я создаю с более новыми версиями VC ++ и GDCM.Ранее я создавал приложение с VC ++ 2015 и старой версией GDCM, и оно скомпилировалось и работало просто отлично.Теперь я сталкиваюсь с исключением в строковом присваивании.

gdcm::Reader r;
r.SetFileName(f.toStdString().c_str());
if (r.Read()) {
    gdcm::StringFilter sf;
    sf = gdcm::StringFilter();
    sf.SetFile(r.GetFile());
    std::string s;

    /* get modality */
    gdcm::Tag tag = gdcm::Tag(0x0008,0x0060);
    s = sf.ToString(tag); // <-- runtime error here...
    fileModality = QString(s.c_str());

    /* get patientID */
    s = sf.ToString(gdcm::Tag(0x0010,0x0020));
    filePatientID = QString(s.c_str());

    /* get protocol (seriesDesc) */
    s = sf.ToString(gdcm::Tag(0x0008,0x103E));
    fileProtocol = QString(s.c_str());
}

Если я использую функцию assign, ошибка переходит на следующую строку при преобразовании строки в c_str.

s.assign(sf.ToString(tag));
fileModality = QString(s.data());

Я не уверен, что происходит, но, похоже, проблема в том, что GDCM неправильно возвращает строковый объект.

Редактировать: Ошибкадиалоговое окно со следующим

The inferior stopped because it triggered an exception.
Stopped in thread 0 by: Exception at 0x7ffaa7b8f621, code: 0xc0000005: read access violation at: 0xfffffffffff, flags=0x0 (first chance).

и стеком вызовов, начиная с моего собственного вызова функции

1   std::_Container_base12::_Swap_all                                                 xutility           239  0x7ff7764a7b7a 
2   std::_String_alloc<std::_String_base_types<char,std::allocator<char>>>::_Swap_all xstring            2029 0x7ff7764a7af7 
3   std::string::_Assign_rv_contents_with_alloc_always_equal                          xstring            2353 0x7ff7764a619d 
4   std::string::_Assign_rv_contents                                                  xstring            2326 0x7ff7764a6132 
5   std::string::operator=                                                            xstring            2308 0x7ff7764a37cd 
6   MainWindow::GetFileType                                                           mainwindow.cpp     477  0x7ff77648784c 
... <More>                                                                                                                   

1 Ответ

0 голосов
/ 28 февраля 2019

Я помещаю это здесь на случай, если кто-нибудь столкнется с подобной проблемой.

Я смог выяснить проблему.GDCM был скомпилирован в Release ... но мое приложение было скомпилировано в Debug.Каким-то образом он просто отлично связался и в основном работал, но когда он столкнулся с вызовом функции из библиотеки GDCM, он потерпел крах.Компилирование всего в Release или Debug исправило это.

...