zoukankan      html  css  js  c++  java
  • (一)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进行回收

  • 相关阅读:
    结构和联合
    字符串、字符和字节
    数组
    函数
    指针
    操作符和表达式
    语句
    数据
    TinyXML2 使用
    是否忘记了向源中添加“#include "StdAfx.h"”?
  • 原文地址:https://www.cnblogs.com/liangxiarong/p/11992826.html
Copyright © 2011-2022 走看看