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;

    评论

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!