C++入门——指针与数组——Expression: _CrtIsValidHeapPointer(Block)

Posted 天道酬勤

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

delete [] ptest; //NOT OK .若是此时进行删除分配的内存,将会报Expression: _CrtIsValidHeapPointer(Block)

delete [] (ptest-1);//OK  地址-1后,将返回第一个元素所在的地址。 或者说,delete 操作符作用于数组时,传递的参数必须是数组开始的地址

//备注:这个报错是否说明,删除new分配的数组内存时,必须需要指针是指向第一个元素呢?

知识点:

1、使用New分配的内存空间,必须要使用delete进行回收

以上是关于C++入门——指针与数组——Expression: _CrtIsValidHeapPointer(Block)的主要内容,如果未能解决你的问题,请参考以下文章

C++入门基础教程:C语言的指针与结构体到底怎么用?

C++入门经典-例6.14-通过指针连接两个字符数组

C++基础入门丨7. 指针——一文搞懂指针

C++基础入门丨7. 指针——一文搞懂指针

C++基础入门丨7. 指针——一文搞懂指针

C++基础入门丨7. 指针——一文搞懂指针