[問題] 動態記憶體配置

作者: discipile (DIS)   2016-07-23 22:35:22
開發平台(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):
有點基礎的觀念,謝謝大家
作者: SeamusBerloz (軒摩斯)   2016-07-23 23:01:00
一,你說對了。二,釋放後指標仍指向野指標。
作者: PkmX (阿貓)   2016-07-23 23:02:00
*(a+b) 和 a[b] 是等價的
作者: Richun (解放左手的OO之力)   2016-07-23 23:02:00
你問題一的寫法是相當於"取Array[15]的值出來+1"
作者: PkmX (阿貓)   2016-07-23 23:03:00
所以 *(array+15)+1; 就是 array[15]+1; 拿來+1以後就丟掉了
作者: Richun (解放左手的OO之力)   2016-07-23 23:03:00
沒有存到任何地方去,所以*(Array+15)的值不變。
作者: SeamusBerloz (軒摩斯)   2016-07-23 23:03:00
得還要自己將指標指向NULL才能確保後續不被誤用。
作者: Richun (解放左手的OO之力)   2016-07-23 23:05:00
不過C的malloc失敗我記得會丟NULL回來
作者: b0920075 (Void)   2016-07-24 00:19:00
free掉之後還要再自己賦值null,呃我的C是這樣寫的我記得free後會變成dangling pointer
作者: ilms49898723 (LittleBird)   2016-07-24 07:43:00
malloc失敗回傳NULL,new失敗丟std::bad_alloc例外
作者: james732 (好人超)   2016-07-24 17:09:00
如果標準有規定delete之後一定會被設成nullptr就好了XD
作者: CoNsTaR ((const *))   2016-07-24 18:06:00
是第16項加一吧 如果從1開始算的話

Links booklink

Contact Us: admin [ a t ] ucptt.com