<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    c++ new長度為0的數組

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注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中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全