1

以下のコードを検討してください。

for (int i = 0; i < thread_number; i ++)
    hThreadArray[i] = CreateThread( 
            0,                   
            0,                      
            single_thread_function_name,      
            (LPVOID)i,                      
            0,                      
            &dwThreadIdArray[i]);   


WaitForMultipleObjects(thread_number, hThreadArray, TRUE, INFINITE);

32 ビット プラットフォームでは正しく動作しますが、64 ビットではクラッシュします。

クラッシュは、WaitForMultipleObjects 関数で発生します。

私が間違っていることを知っている人はいますか?

編集:hThreadArrayは次のように宣言されています:

HANDLE*  hThreadArray;
hThreadArray = (HANDLE*) malloc (thread_number * sizeof(HANDLE));

次のような single_thread_function_name:

DWORD WINAPI single_thread_function_name( LPVOID lpParam ){
.....
return 0;
}
4

1 に答える 1

1

hThreadArrayは配列ではなく、単なるポインタです。確かにクラッシュするはずです。32ビットプラットフォームでどのように機能するかは奇妙です。

hThreadArrayはmallocされているため、64ビットのアライメント要件を満たしていない可能性があります。試してみてください:

HANDLE hThreadArray[100] = {0};
于 2012-04-16T11:11:15.433 に答える