free 或delete后指针怎么样了

free()和delete()只是把指针所指向的内存释放掉,但是并没有把指针本身删除,也没有把指针置为NULL;

#include<iostream>
using namespace std;

int main(void)
{
    char *p=(char *)malloc(100*sizeof(int));
    strcpy(p,"Hello World");
    cout<<"释放前指针p的地址:"<<&p<<endl;
    free(p);
    cout<<"释放后指针p的地址:"<<&p<<endl;

    if(p!=NULL)
    cout<<p<<endl;

    getchar();
}

运行结果:

从运行结果可以看出,指针p仍然存在,而且地址也没有变,只是指向了一大坨乱七八糟的东西。

free(p)之前:

free(p)之后:

因此:不等于NULL的指针不一定是有效的指针,指针初始化的时候不要忘记置为NULL,或者指向有效的地址,指针删除后也最好置为NULL

char *p=NULL;
char *str=new char[100];

free(str);
str=NULL;

free 或delete后指针怎么样了

时间: 2024-10-23 00:27:28

free 或delete后指针怎么样了的相关文章

使用delete删除指针(转)

p所指的空间.比如 int* p = new int(1);delete p;就会在堆上分配一块内存,当作int类型使用,并赋值为1,将其地址储存在栈上的int*类型的p里.delete p会释放p所指向的内存.而这里p为一自动变量,其本身在程序退出其作用域时销毁. 用delete命令处理某个指针,说是把那个指针删除了是不正确的. delete命令指示释放了那个指针原本所指的那部分内存而已.被delete后的指针p的值(地址值)并非就是NULL,而是随机值. 也就是被delete后,如果不再加上

【转载】 free(p)后指针问题

转载自:http://blog.csdn.net/onestep365/article/details/1897626 #include <stdio.h>#include <string.h>#include <stdlib.h>int main(){  char *str = (char *)malloc(100);  strcpy(str, "hello");  free(str);  if(str != NULL)    {      str

测试对象销毁后指针是否还可以使用

<span style="font-size:18px;">// 04-测试对象销毁后指针是否还可以使用 // // Created by wanghy on 15/8/13. // // //为了直观,直接将.m和.h文件写在main.m中. #import <Foundation/Foundation.h> //定义 person类 包含 姓名,年龄和性别 @interface person : NSObject { @public NSString * _

free和delete把指针怎么啦?

别看free和delete的名字恶狠狠的(尤其是delete),它们只是把指针所指的内存给释放掉,但并没有把指针本身干掉. 用调试器跟踪示例7-5,发现指针p被free以后其地址仍然不变(非NULL),只是该地址对应的内存是垃圾,p成了“野指针”.如果此时不把p设置为NULL,会让人误以为p是个合法的指针. 如果程序比较长,我们有时记不住p所指的内存是否已经被释放,在继续使用p之前,通常会用语句if (p != NULL)进行防错处理.很遗憾,此时if语句起不到防错作用,因为即便p不是NULL指

为什么delete指针后指针设为null

int *p;/*........*/delete p; p=null; 看代码的过程中,有这么一个疑问.删除了指针p,指针p既是不存在,怎么还能设置指针p为null呢?为什么还要设置为null呢? 后来得知计算机上删除数据的方式:删除数据(视频,音乐,文件等),计算机并不会把存储数据的硬盘区域(或者是内存)的内容擦除消去,而是将内容标记为可覆盖,这时候我们就不能再访问到数据,而这些可覆盖据数据会留在原来的硬盘区域直到被新的数据逐渐覆盖.(所以,删除了数据之后,只要没有对硬盘进行过多的操作,还是

vector中insert/erase后指针失效问题

之前看<C++ Primier>的时候,也解到在顺序型窗口里insert/erase会涉及到迭代器失效的问题,并没有深究.今天写程序的时候遇到了这个问题. 1 小心冀冀地Erase 最初我的程序是酱紫的,别说话,我知道这样是有问题的,可这样是最直观的想法 vector<int> a; for (int i = 0; i < 10; ++i) { a.push_back(i); } for (auto it = a.begin(); it != a.end();++it ){

SVN(Subversion) delete后svn: E155037

今天下午对于一个项目文件进行管理时出现错误,具体显示如下: svn: E155037: Previous operation has not finished; run 'cleanup' if it was interrupted 那么到底是什么原因导致这个错误的?自己管理项目时修改如下: 1. Tortoise删除ipch文件夹.ipch文件夹下包含两个文件夹,其中文件夹A未进行版本管理,文件夹B进行版本管理. 如下图: ipcp |-A |_B 此时,Tortoise会进行提示,然后执行了

oracle delete 后的还原数据 靠谱

 一,查找大致时间点的SCN select timestamp_to_scn(to_timestamp('2015-01-05 21:20:00','yyyy-mm-dd hh24:mi:ss')) from dual; 二,查询被删除的数据,并还原 insert into ERP_FACILITY_MAP  select * from ERP_FACILITY_MAP as of scn 1603128909 select * from ERP_FACILITY_MAP

offset 后 指针数组转换

AcDbObjectId pidoffset; AcDbPolyline *plineOffset; AcDbVoidPtrArray ptarr=NULL; pline->getOffsetCurves(dist, ptarr); int ilen = ptarr.length(); for (int i = 0; i < ilen; i++) { plineOffset = static_cast<AcDbPolyline*>(ptarr[i]); pidoffset = CD