1. ホーム
  2. リナックス

マルチスレッドプログラミング警告: 異なるサイズの整数からポインタへのキャスト [-Wint-to-pointer-cast] エラーが解決されました。

2022-02-25 13:33:31
<パス
  • マルチスレッドプログラミングでの利用
thread_start(pthread_t * thread_id, THREAD_BODY * thread_workbody, void *thread_arg);


 最後の引数がサブスレッドのファイル記述子へのポインタ(int型)である必要があるため、サブスレッドを作成する際には、ファイル記述子を強力に変換して呼び出します。 (void *) type int型からvoid型のポインタに強変換すると、こうなるというのは、システムが違うのかもしれません。

warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] 


 このようなエラーを解決するには、そのファイルディスクリプタのアドレス、すなわち

eg: thread_start(&tid, thread_worker, &chifd);


 もう一度コンパイルすれば直ります!

  • お使いのシステムが int と (void *) の間の型変換をサポートしていない場合、サブスレッドに次のような他のタスクを実行させようとすると、マルチスレッド・プログラミングに遭遇することもあります。 thread_worker(void *ctx) この関数は、サブスレッドのファイル記述子への void ポインタを渡したままなので、もし、直接 chifd = (int)ctx を使用すると上記の問題が発生するため、まず強制的にポインタを (int *) 型に変換し、その値を

 例えば chifd = *(int *)ctx

前任者を参照する。 https://blog.csdn.net/mybelief321/article/details/9375929