陣列越界導致的執行崩潰(列舉作為陣列中的常量)
阿新 • • 發佈:2019-01-30
這個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]++;時就是陣列越界了!