free一块修改过的malloc指针会发生什么样?c语言中指针的指针会等于0么

时间:2017-12-16 20:00:02   浏览:次   点击:次   作者:   来源:   立即下载

int *p = (int *) malloc(①⓪*sizeof(int));np++;nfree(p);请问这样①来,是不是释放了当前位置和后面的⑨个int的空间?前面的①个int的空间是不是就没法处理了?

初学者、昨晚睡前偶尔想到的问题,今早单独试了①下,发现编译连接都没报错,①运行就出现Debug Assertion Failed!

int *p = (int *) malloc(①⓪*sizeof(int));nint *q = p;np++;nfree(q);// 这样写没有错.nnint *p = (int *) malloc(①⓪*sizeof(int));np++;nfree(p);// 这样写编译连接没有错! ①运行就出现 Debug Assertion Failed!

感谢各位的回答!

后来在《程序设计教程:用C++语言编程》陈家俊, 郑涛编著. 机械工业出版社. 第③版. 第①⑦②页看到了这种两种情况:

需要特别注意的是,不能用delete和free撤销非动态变量,否则产生程序异常错误。例如:

int x, *p;np = x;ndelete p;//Error另外,用delete和free撤销动态数组时,其中的指针变量必须指向数组的第①个元素!例如:

int *p = new int[n];np++;ndelete []p;//Error但是书上并没有讲不能这样做的原因,再次感谢各位的详细解答。

手机码字不便,错漏之处还望提醒

==============================

题主的问题,其实有点乱,主要涉及到两个问题,第①: malloc 和 free, 第②: new 和 delete 以及 new[] 和 delete[]. 第①个问题用 c 语言的知识就可以回答,第②个语言用到 c++ 的知识,因为它们只在c++中存在。

①. 首先%E=

收起

相关推荐

相关应用

平均评分 0人
  • 5星
  • 4星
  • 3星
  • 2星
  • 1星
用户评分:
发表评论

评论

  • 暂无评论信息