最近在入门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)的更多相关文章

  1. (0)c++入门——认识指针与数组——指针即是内存中地址。

    初识指针 首先需要了解一个概念,计算机的内存(或者说是寄存器)都是有地址的. <c++ primer plus>一书P37中提到这样一个概念:为把信息存储在计算机中,程序必须记录3个基本属 ...

  2. C与指针(结构体指针,函数指针,数组指针,指针数组)定义与使用

    类型 普通指针 指针数组(非指针类型) 数组指针 结构体指针 函数指针 二重指针 定义方式 int *p; int *p[5]; int (*p)[5]; int a[3][5]; struct{.. ...

  3. 11-C语言指针&一维数组&字符串

    一.用指针遍历数组元素 1.最普通的遍历方式是用数组下标来遍历元素 1 // 定义一个int类型的数组 2 int a[4] = {1, 2, 3, 4}; 3 4 int i; 5 for (i = ...

  4. 指针与数组的区别 —— 《C语言深度剖析》读书心得

    原书很多已经写的很清楚很精炼了,我也无谓做无意义的搬运,仅把一些基础和一些我自己以前容易搞混的地方写一下. 1. 意义: 指针: 指针也是一种类型,长度为4字节,其存放的内容只能是一个地址(4字节). ...

  5. 不可或缺 Windows Native (18) - C++: this 指针, 对象数组, 对象和指针, const 对象, const 指针和指向 const 对象的指针, const 对象的引用

    [源码下载] 不可或缺 Windows Native (18) - C++: this 指针, 对象数组, 对象和指针, const 对象,  const 指针和指向 const 对象的指针, con ...

  6. 指针 与 数组 以及 a 与 &a的区别

      指针 与数组 并没有什么关系,   指针就是指针,指针变量在32位系统下,永远占4个byte,其值为某一个内存的地址,指针可以指向任何地方,但是不是任何地方你都能通过这个指针变量访问到;   数组 ...

  7. c/c++ 函数指针 指针函数 数组的引用 指针数组 数组指针

    1.指针数组数组指针 引用数组 数组的引用 int *a[10] 指针数组 每一个元素都是一个指针 Int (*a)[10] 数组指针 P指向一个含有10个元素的数组 Int (&a)[10] ...

  8. 深入理解C语言中的指针与数组之指针篇

    转载于http://blog.csdn.net/hinyunsin/article/details/6662851     前言 其实很早就想要写一篇关于指针和数组的文章,毕竟可以认为这是C语言的根本 ...

  9. 转: 浅谈C/C++中的指针和数组(二)

    转自:http://www.cnblogs.com/dolphin0520/archive/2011/11/09/2242419.html 浅谈C/C++中的指针和数组(二) 前面已经讨论了指针和数组 ...

随机推荐

  1. LG2467 地精部落

    题意 给出\(n\),求有几个\(W\)形的\(n\)的全排列(震荡) 思路 可以变求出第二个数比第一个数大的,再翻倍就好 设\(f[i][j]\)表示\(i\)个数中\(j\)个数不符合序列 转移时 ...

  2. hdu5492

    hdu5492 陈大哥的毒瘤题T1 题意: 差不多就是根据题意推式子,求最小方差. 解法: 首先,可以观察到,如果我们直接暴力去取平均数,很大概率会取出来小数,所以一个很直观的想法就是把平均数从式子里 ...

  3. iOS开发-多层嵌套block中如何使用__weak和__strong

    1.关于__weak__weak只能在ARC模式下使用,也只能修饰对象(比如NSString等),不能修饰基本数据类型(比如int等)__weak修饰的对象在block中不可以被重新赋值.__weak ...

  4. python之json读写

    #将字典转json并写入文件 import json i=3 j=5 a={'a':i,'b':j} js=json.dumps(a) print(js) with open("/Users ...

  5. mysql主从复制原理及步骤

    原理: 1master开启bin-log功能,日志文件用于记录数据库的读写增删2需要开启3个线程,master IO线程,slave开启 IO线程 SQL线程,3Slave 通过IO线程连接maste ...

  6. cvxpy给的ADMM_example报错

    x = Variable((3, 1), name="x") ValueError: Cannot broadcast dimensions  (3, 1) (3, ) 解决方案: ...

  7. Flutter移动电商实战 --(12)首页导航区域编写

    1.导航单元素的编写 从外部看,导航是一个GridView部件,但是每一个导航又是一个上下关系的Column.小伙伴们都知道Flutter有多层嵌套的问题,如果我们都写在一个组件里,那势必造成嵌套严重 ...

  8. 阿里云Ubuntu 16 FTP安装配置注意事项

    1. 开放端口设置 阿里云控制台添加"安全组规则". 1) 21: FTP端口; 2) 15000~15100: 对应vsftpd.conf 自定义配置. (重要!) pasv_e ...

  9. 禁用显示GC 会有什么问题?-XX:+DisableExplicitGC

    -XX:+DisableExplicitGC

  10. kafka default partitioner java版本和scala版本的不同

    scala import kafka.utils._ class DefaultPartitioner(props: VerifiableProperties = null) extends Part ...