2012-04-16 144 views
1

考虑下面的代码:WaitForMultipleObjects的崩溃

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; 
} 
+0

你可以发布'hThreadArray'声明和'single_thread_function_name()'代码吗? – hmjd 2012-04-16 11:03:49

+0

当然,我编辑过。 – Aslan986 2012-04-16 11:08:34

+2

您是否在hThreadArray中存储了任何内容,或者是否将其保留为未初始化? – bmargulies 2012-04-16 11:09:38

回答

1

hThreadArray不是数组,只是一个指针,它当然应该崩溃。奇怪它如何在32位平台上工作。

由于hThreadArray是malloced,也许它不符合64位对齐要求。试一下:

HANDLE hThreadArray[100] = {0}; 
+3

数组名称是指向数组的第一个元素的指针。没有'hThreadArray'的初始化,你不能说它不是一个数组。 – Default 2012-04-16 11:18:12

+0

是的,我用这种方式初始化它: hThreadArray =(HANDLE *)malloc(thread_number * sizeof(HANDLE)); 这是一个数组。 – Aslan986 2012-04-16 11:23:10

+0

对不起,我在编辑过程中意外地保存了我的答案...... – Malkocoglu 2012-04-16 12:00:51