1. 程式人生 > >陣列越界導致的執行崩潰(列舉作為陣列中的常量)

陣列越界導致的執行崩潰(列舉作為陣列中的常量)

這個bug的出現也是莫名其妙的,在除錯狀態下不會出現崩潰情況,單獨啟動exe立馬崩潰。而且返回的錯誤是在ntdll.dll中,壓根看不出開哪裡出錯!

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

問題描述:定義一個列舉型別,然後想用0/1判斷每個列舉值對應的任務狀態!也就定義了下面的陣列

//任務狀態
typedef enum __tagPhoneAddressTask{
	PAT_NONE,
	PAT_GET_ADDRESS_LIST, //獲取列表
	PAT_DELETE,           //刪除
	PAT_FIXEDDATA,		  //上傳/修改單個聯絡人
	PAT_ADDDATA,
	PAT_EXPORT,
	PAT_IMPORT,
}tagPhoneAddressTask;


int taskArray[sizeof(tagPhoneAddressTask)];

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

解析:sizeof(列舉型別)的值一般情況下是=4,而我是恰恰是用了這個來作為數組裡的常量,當在程式中呼叫taskArray[PAT_IMPORT]++;時就是陣列越界了!