看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VS2010 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): https://gist.github.com/Discipile/098e289272db2107ca92590258bd609f 這是我寫來練習動態記憶體配置的程式碼 問題一. *(Array+15)+1; 這樣子的意義不等於我在這個Array得第15項+1,那麼我這樣寫它的意義是什麼? 我猜是 將第15項值加1沒有回傳這樣,所以要用16項的寫法才可以? 16項等於一般Array的 A[16]++吧? 問題二. 網路上看到要確認有沒有配置成功,用if(Array==0)去檢查 可是我delete後再看,沒有辦法進入已清除那一個if裡面 另外我用過NULL測試也一樣,在這邊等於0跟等於NULL意思一樣? 餵入的資料(Input): 預期的正確結果(Expected Output): 錯誤結果(Wrong Output): 程式碼(Code):(請善用置底文網頁, 記得排版) 補充說明(Supplement): 有點基礎的觀念,謝謝大家 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.123.112.13 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1469284526.A.5B5.html
SeamusBerloz: 一,你說對了。二,釋放後指標仍指向野指標。07/23 23:01
PkmX: *(a+b) 和 a[b] 是等價的07/23 23:02
Richun: 你問題一的寫法是相當於"取Array[15]的值出來+1"07/23 23:02
PkmX: 所以 *(array+15)+1; 就是 array[15]+1; 拿來+1以後就丟掉了07/23 23:03
Richun: 沒有存到任何地方去,所以*(Array+15)的值不變。07/23 23:03
SeamusBerloz: 得還要自己將指標指向NULL才能確保後續不被誤用。07/23 23:03
PkmX: 問題2你看到的是錯的 new如果配置失敗會丟exception07/23 23:03
PkmX: 也沒有規定 delete 以後會把指標清成 007/23 23:04
Richun: 不過C的malloc失敗我記得會丟NULL回來07/23 23:05
b0920075: free掉之後還要再自己賦值null,呃我的C是這樣寫的07/24 00:19
b0920075: 我記得free後會變成dangling pointer07/24 03:36
ilms49898723: malloc失敗回傳NULL,new失敗丟std::bad_alloc例外07/24 07:43
james732: 如果標準有規定delete之後一定會被設成nullptr就好了XD07/24 17:09
CoNsTaR: 是第16項加一吧 如果從1開始算的話07/24 18:06
謝謝大家說明 原來delete後沒有被定義成NULL 還有他都有定義好失敗回傳的東西 ※ 編輯: discipile (36.239.65.3), 07/25/2016 13:50:23