[問題] 動態記憶體配置

看板C_and_CPP (C/C++)作者 (DIS)時間9年前 (2016/07/23 22:35), 9年前編輯推噓5(509)
留言14則, 7人參與, 最新討論串5/6 (看更多)
開發平台(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

07/23 23:01, , 1F
一,你說對了。二,釋放後指標仍指向野指標。
07/23 23:01, 1F

07/23 23:02, , 2F
*(a+b) 和 a[b] 是等價的
07/23 23:02, 2F

07/23 23:02, , 3F
你問題一的寫法是相當於"取Array[15]的值出來+1"
07/23 23:02, 3F

07/23 23:03, , 4F
所以 *(array+15)+1; 就是 array[15]+1; 拿來+1以後就丟掉了
07/23 23:03, 4F

07/23 23:03, , 5F
沒有存到任何地方去,所以*(Array+15)的值不變。
07/23 23:03, 5F

07/23 23:03, , 6F
得還要自己將指標指向NULL才能確保後續不被誤用。
07/23 23:03, 6F

07/23 23:03, , 7F
問題2你看到的是錯的 new如果配置失敗會丟exception
07/23 23:03, 7F

07/23 23:04, , 8F
也沒有規定 delete 以後會把指標清成 0
07/23 23:04, 8F

07/23 23:05, , 9F
不過C的malloc失敗我記得會丟NULL回來
07/23 23:05, 9F

07/24 00:19, , 10F
free掉之後還要再自己賦值null,呃我的C是這樣寫的
07/24 00:19, 10F

07/24 03:36, , 11F
我記得free後會變成dangling pointer
07/24 03:36, 11F

07/24 07:43, , 12F
malloc失敗回傳NULL,new失敗丟std::bad_alloc例外
07/24 07:43, 12F

07/24 17:09, , 13F
如果標準有規定delete之後一定會被設成nullptr就好了XD
07/24 17:09, 13F

07/24 18:06, , 14F
是第16項加一吧 如果從1開始算的話
07/24 18:06, 14F
謝謝大家說明 原來delete後沒有被定義成NULL 還有他都有定義好失敗回傳的東西 ※ 編輯: discipile (36.239.65.3), 07/25/2016 13:50:23
文章代碼(AID): #1Nau2kMr (C_and_CPP)
文章代碼(AID): #1Nau2kMr (C_and_CPP)