nkakaxi 2014-11-29 15:29 采纳率: 42.9%
浏览 2232

指针删除操作 指针赋值 错误

#include "stdafx.h"
#include
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
int *p,*q;
p = new int[10];
p[0] = 2;
p[1] = 1;

cout << "********"<< endl;
q = p+1;
cout << *q <<endl;
delete []q;  //为何删除时出现bug,if:q=p,things will be all right?
return 0;

}

  • 写回答

2条回答 默认 最新

  • 弟弟是熊孩子 2014-11-29 16:37
    关注

    delete 指针实际上释放了指针所指的堆内存,但指针本身是一个32位(在32位机器上)的无符号整数。其值是对象的首地址,这个值并没变。也就是说,你用delete后,不但指针任然存在,而且其内容都没有变换。他本身的释放在超过他生命周期的时候销毁。然而现在指针所指的内存已经不可用了,再次操作其内容将会发生内存错误(比如再次delete)。所以,安全的做法是让指针值等于NULL
    cout << "********"<< endl;
    q = p+1;
    cout << *q <<endl;
    q = NULL;
    delet []q;
    return 0;

    评论

报告相同问题?

悬赏问题

  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果
  • ¥15 matlab图像高斯低通滤波
  • ¥15 针对曲面部件的制孔路径规划,大家有什么思路吗
  • ¥15 钢筋实图交点识别,机器视觉代码
  • ¥15 如何在Linux系统中,但是在window系统上idea里面可以正常运行?(相关搜索:jar包)
  • ¥50 400g qsfp 光模块iphy方案
  • ¥15 两块ADC0804用proteus仿真时,出现异常