Магия ++ сегфо в потоке

Написание программы сканирования. После того, как он читает изображение, он вызывает convertToPDF() а затем читает следующее изображение. Программа seg неисправностей (RUN FINISHED; Segmentation fault: 11;) когда изображение объявлено в теме. Тот же код работает нормально при запуске в основном потоке, я переместил его из thrPDF в convertToPDF Чтобы убедиться. Так что я думаю, что это связано с распределением памяти Magick++, которое у меня над головой. Любая помощь приветствуется.

void ScanWindow::convertToPDF(string fileName)
{
   pthread_t convert;
   string* args = new string(fileName);
   void *thrPDF(void*);
   pthread_create(&convert,NULL,thrPDF,args);
}

void *thrPDF(void* a)
{
   string* fName = (string*) a;
   string newFile = fName->substr(0,fName->length()-3) + "pdf";

   Magick::Image img(*fName);  // this is the line that seg faults
   img.magick("pdf");
   img.write(newFile);

   pthread_exit(0);
}

Вот стек вызовов:
omp_get_max_threads (?)
GetOpenMPMaximumThreads встроенный
AcquirePixelCache (?)
AcquireImage (?)
Magick:: ImageRef:: ImageRef (?)
Magick:: Image:: Изображение (?)
thrPDF (?)
_pthread_start (?)
thread_start (?)

1 ответ

Если это еще не сделано, вы должны вызывать InitializeMagick(NULL) (или InitializeMagick(*argv)) в основном / исходном потоке перед использованием остальной части API. Это может помочь решить некоторые проблемы, связанные с многопоточностью. С Magick++, включенным в GraphicsMagick, это является абсолютным требованием в современных выпусках.

Другие вопросы по тегам