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 是 malloced,可能不符合 64 位对齐要求。尝试:

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