gpt4 book ai didi

c++ - 线程中的 Magick++ 段错误

转载 作者:太空狗 更新时间:2023-10-29 23:05:59 25 4
gpt4 key购买 nike

编写扫描程序。读取图像后,它会调用 convertToPDF(),然后读取下一张图像。当在线程中声明图像时,程序出现段错误(RUN FINISHED;段错误: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 内联
获取像素缓存(?)
获取图像(?)
魔法::ImageRef::ImageRef(?)
魔法::图片::图片(?)
thrPDF(?)
_pthread_start(?)
thread_start(?)

最佳答案

如果尚未完成,您应该在使用其余 API 之前在主/原始线程中调用 InitializeMagick(NULL)(或 InitializeMagick(*argv))。这可能有助于解决与线程相关的一些问题。对于 GraphicsMagick 中包含的 Magick++,这是现代版本中的绝对要求。

关于c++ - 线程中的 Magick++ 段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17238422/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com