c++ new長度為0的數組
睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接

在程序中發現一下代碼:

int CHmcVideoMgt ::OnGetDiskRunningInfo( SOCKETPARAM *pSocketInfo ,Json:: Value Param ) { int iArrayLen = Param[ _T("NUM" )].asInt(); ..... LPDiskRunningInfo pDiskRunningInfo = new DiskRunningInfo[iArrayLen ]; int nResult = HMCBLL_GetDiskRunningInfo(pDiskRunningInfo ,iArrayLen); SAFE_DELETE_POINTER_ARRAY (pDiskRunningInfo); return E_SUCCEED ; }

代碼中沒有判斷 iArrayLen 的值為0的情況, 如果iArrayLen =0, LPDiskRunningInfo pDiskRunningInfo = new DiskRunningInfo [iArrayLen ] 執行成功, 而且指針也可以正常的賦值和操作. 但是在刪除的時候彈出堆棧異常, 提示"其原因可能是堆被損壞". c++是不允許定義長度為0的數組的, 如果定義 char sz[0]; 編譯器報錯: error C2233: “Target of operator new()” : 包含大小為零的數組的對象數組是非法的. 但是在new一個長度為0數組時,編譯不報錯, 也返回一個正常的指針地址, 但是實際沒有分配內存, 當修改數據時就會導致內存被破壞. 當被破壞的內存恰好被使用時就會導致異常.RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成