2012-04-16 60 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