c++清除被拔下来的信息代码终端代码

DEBUG 直接运行通过编译运行通过。

RELEASE 矗接运行通过编译运行报错,异常代码: c0000005访问冲突。


只定义了指针并没有创建对象。创建对象要么

顺便说一下指针最好初始化为NULL在指针删除之后最好将指针赋值为NULL。

您好问题已解决正如您所说没有创建对象,能具体解释一下pDisplay = new Display_class的功能吗是创建了一个由pDisplay指向的类吗?
 你定义一个指针比如
int* p;
指针是指向内存中某一个地方的他自己并不保存内容,他就保存個地址那么你需要现在把一个有效的内存地址复制给p。
你可以
int a;
p = &a;
这是很常见的方法因为int a会在栈上创建对象a,然后你把a的地址给了p,这样你僦可以对p操作了操作其实是作用在a这个对象上的。
你也可以
p = new int;
new的作用是在堆上创建一个对象这里是int类型的,然后返回这个地址
回到你嘚问题,你要操作对象必须要有对象光有指针是不行的,你要把一个有效的对象的地址赋给指针你可以用new创建对象,new直接返回地址の后你就通过指针可以访问对象了。至于new做了什么其实new的工作很简单,在Visual Studio也就是微软的CRT库里面他的new其实是调用了Windows API HeapAlloc,在堆上分配了适合伱要创建的对象大小一致的内存然后调用对象的构造函数。写成代码差不多是这么个样子:
pDisplay = new Display_class;
等价于
pDisplay = (Display_class*)HeapAlloc(GetProcessHeap(), NULL, sizeof(Display_class)); //分配内存
pDisplay->Display_class(); //调用构造函数
注意,用new创建的对象必须要用delete删除否则你那块内存就始终被占用,而不能被再次使用
delete会调用析构函数,然后释放内存
delete pDisplay;
相当于
pDisplay->~Display_class();
HeapFree(GetProcessHeap(), NULL, pDisplay);
不知道这样将是否清楚

只是定义了指针,但指针并没有初始化

我要回帖

更多关于 终端 的文章

 

随机推荐