free一块修改过的malloc指针会发生什么样?c语言中指针的指针会等于0么
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=
- 5星
- 4星
- 3星
- 2星
- 1星
- 暂无评论信息