考虑下面的代码:
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; }
hThreadArray不是一个数组,只是一个指针,它肯定会崩溃。 奇怪的是它在32位平台上如何工作。
由于hThreadArray是mableced,也许它不符合64位对齐要求。 试试:
HANDLE hThreadArray[100] = {0};