当前位置: 技术问答>linux和unix
suse linux 下 C++ delete问题,请执教。
来源: 互联网 发布时间:2016-03-03
本文导语: 使用g++编译器编译以下代码,调试发现,子类对象在delete后,对象的成员依然可以正常访问。 红色部分打印结果依然正确。 有没有大虾清楚linux内存管理机制, 提问如下: 1.如下的方法,系统是否能正常收回内存?...
使用g++编译器编译以下代码,调试发现,子类对象在delete后,对象的成员依然可以正常访问。 红色部分打印结果依然正确。
有没有大虾清楚linux内存管理机制,
提问如下:
1.如下的方法,系统是否能正常收回内存?
2.是否有g++编译选项可以杜绝此类现象发生,因为在VC下调试,delete后内存会被填充无效值。 LINUX下是否可以??
多谢赐教,非常感谢。
#include "stdio.h"
class Cchild
{
public:
int age;
virtual void print()
{
printf("Cchild print!n");
};
};
class Cboy:public Cchild
{
public:
int sex;
Cboy(int s)
{
sex = s;
};
void print()
{
printf("Cboy print!n");
};
};
int main(int argc, char* argv[])
{
Cboy *boy = new Cboy(1);
if (NULL == boy)
{
return -1;
}
boy->age = 10;
// delete it
delete(boy);
printf("%dn", boy->sex);
return 0;
}
有没有大虾清楚linux内存管理机制,
提问如下:
1.如下的方法,系统是否能正常收回内存?
2.是否有g++编译选项可以杜绝此类现象发生,因为在VC下调试,delete后内存会被填充无效值。 LINUX下是否可以??
多谢赐教,非常感谢。
#include "stdio.h"
class Cchild
{
public:
int age;
virtual void print()
{
printf("Cchild print!n");
};
};
class Cboy:public Cchild
{
public:
int sex;
Cboy(int s)
{
sex = s;
};
void print()
{
printf("Cboy print!n");
};
};
int main(int argc, char* argv[])
{
Cboy *boy = new Cboy(1);
if (NULL == boy)
{
return -1;
}
boy->age = 10;
// delete it
delete(boy);
printf("%dn", boy->sex);
return 0;
}
|
delete boy后
boy仍然指向原来的空间
这部分空间标记为未使用
如果这部分空间没有被覆盖 你可能还能获得原来的数据
杜绝此类现象发生就要你自己控制了
delete之后
boy = NULL;
以后访问boy先判断boy是不是NULL
boy仍然指向原来的空间
这部分空间标记为未使用
如果这部分空间没有被覆盖 你可能还能获得原来的数据
杜绝此类现象发生就要你自己控制了
delete之后
boy = NULL;
以后访问boy先判断boy是不是NULL
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。