业无高卑志当坚,男儿有求安得闲?这篇文章主要讲述C++入门——指针与数组——Expression: _CrtIsValidHeapPointer(Block)相关的知识,希望能为你提供帮助。
最近在入门c++,在看《c++ Primer Plus》一书。书中P106提到,删除使用New创建的数组时,是将指针重新指到第一个元素后,再进行的删除操作。代码如下:
int *ptest = new int[3];
ptest[0]=1;
ptest[1]=2;
ptest[2]=3;
cout<
<
"*ptest "<
<
*ptest<
<
endl;
ptest = ptest+1;
//此时指针指向第二个元素,也即:ptest[1]
cout<
<
"*ptest "<
<
*ptest<
<
endl;
//这里输出 2
【C++入门——指针与数组——Expression: _CrtIsValidHeapPointer(Block)】delete [] ptest;
//NOT OK .若是此时进行删除分配的内存,将会报Expression: _CrtIsValidHeapPointer(Block)
delete [] (ptest-1);
//OK
地址-1后,将返回第一个元素所在的地址。 或者说,delete 操作符作用于数组时,传递的参数必须是数组开始的地址。
//备注:这个报错是否说明,删除new分配的数组内存时,必须需要指针是指向第一个元素呢?
知识点:
1、使用New分配的内存空间,必须要使用delete进行回收。
推荐阅读
- [Algorithm] 94. Binary Tree Inorder Traversal iteratively approach
- 通过Charles设置App页面返回值的显示,检查数字是否异常显示
- C# 如何添加自定义键盘处理事件 如何配置app.config ? | csharp key press event tutorial and app.config
- 导入项目后,http://schemas.android.com/apk/res/android报错
- Android Fastboot 与 Recovery 和刷机千山万水迷了鹿
- 手动安装Android abb 包方法与心得
- Android的消息机制之ThreadLocal的工作原理
- uniapp里组件传值的异常情况(Watch方法的使用)
- Appendix 2- Lebesgue integration and Reimann integration