[问题] 动态内存配置

楼主: 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