3

スキャンプログラムの作成。イメージを読み取った後、次のイメージを呼び出しconvertToPDF()て読み取ります。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);
}

コールスタック は 次 の
とおり です 。 _ _ ?)







4

1 に答える 1

1

まだ実行されていない場合は、残りの API を使用する前に、メイン/元のスレッドで InitializeMagick(NULL) (または InitializeMagick(*argv)) を呼び出す必要があります。これにより、スレッドに関連するいくつかの問題を解決できる場合があります。GraphicsMagick に含まれる Magick++ では、これは最新のリリースでは絶対的な要件です。

于 2013-07-14T20:12:59.037 に答える