社区
C++ 语言
帖子详情
删除对象指针为什么会出现段错误?
thinkperson_x201
2016-05-23 10:11:44
class B
{
int a;
int b;
public:
virtual ~B()
{
printf("B::~B()\n");
}
};
class D: public B
{
int c;
public:
virtual ~D()
{
printf("D::~D()\n");
}
};
int main()
{
B *pb = new D[2];
delete [] pb;
}
运行出现段错误:
段错误 (core dumped)
原因是什么?
...全文
290
3
打赏
收藏
删除对象指针为什么会出现段错误?
class B { int a; int b; public: virtual ~B() { printf("B::~B()\n"); } }; class D: public B { int c; public: virtual ~D() { printf("D::~D()\n"); } }; int main() { B *pb = new D[2]; delete [] pb; } 运行出现段错误: 段错误 (core dumped) 原因是什么?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
paschen
版主
2016-05-24
打赏
举报
回复
new D[2] 返回的类型是D*,中间你转换成B*是你的事,但在delete时你也要delete D*类型
int main() { B *pb = new D[2]; delete [] (D*)pb;
lm_whales
2016-05-24
打赏
举报
回复
因为分配的时候,并没有记录每个对象的类型 所以delete的时候,只能根据 指针的类型 delete 这样就不能准确找到每个对象了 如果是 单个对象。虚析构函数是可以准确析构的 数组是多个对象,因此除了第一个外,其他都不能准确析构
dustpg
2016-05-23
打赏
举报
回复
不要这么干,这是未定义行为,简单地说就是数组没有多态性。 虽然有点麻烦,但是也能好理解,规避也比较简单
精通C语言
指针
指针
被誉为C语言的精髓、C本质上是加了一层语法糖的汇编,引进当时先进的函数,保留了汇编强大的地址直接访问功能 ——
指针
,使其高效灵活。本课程是黄强老师对于
指针
的一次专题讲解,相信能给大家带来收获!
什么是“NULL
指针
”,“悬空
指针
”和“野
指针
”?
1,什么是NULL
指针
? NULL用于指示
指针
未指向有效位置。理想情况下,如果在声明时不知道
指针
的值,则应将
指针
初始化为NULL。另外,当由它指向的内存在程序中间被释放时,我们应该使
指针
为NULL。 2,什么是悬空
指针
? 悬空
指针
是没有指向有效内存位置的
指针
。当
删除
或释放
对象
时,如果不修改
指针
的值,就
会
出现
悬空
指针
,因此
指针
仍然指向释放后的内存的存储位置。以下是示例。 悬空
指针
C语言中的
指针
可以指向一块内存,如果这块内存稍后被操作系统回收(被释放),但是
指针
仍然指向这块内存,那么,此时...
什么是智能
指针
?为什么要用智能
指针
?
什么是智能
指针
?为什么要用智能
指针
?如何打破循环引用的问题?对于资源管理有什么作用? 看到这些问题,心里就发毛。什么是智能
指针
啊?为什么要用智能
指针
啊?循环引用又是什么鬼?实现?我❌... 首先我们来看一下第一个问题,什么是智能
指针
? 常见的智能
指针
有几种,一种是共享
指针
shared_ptr,一种是独享
指针
unique_ptr,一种是弱
指针
weak_ptr,一种是很久没用过的auto_ptr(被u...
什么是内存泄漏?什么是野
指针
?什么是内存越界?如何避免?
内存泄漏 百度百科上的定义:内存泄漏(Memory Leak)是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。 一看定义,坑好像更多了,动态分配,堆内存是什么? 某种原因包含哪种原因? 未释放我能理解,无法释放是什么时候 看后果很严重,运行速度减慢!系统崩溃!那么内存究竟为什么这么强?? 危害举了一个例子,比如服务...
C/C++面试:什么是智能
指针
?智能
指针
有什么作用?分为哪几种?各自有什么样的特点?
通过关键字inline,可以将函数声明为内嵌函数: inline double halve(double x){ return (x/2.0); } 被声明为内嵌函数的函数,在调用它的为止,代码
会
像宏一样展开。 下面是内嵌函数必须满足的规则和特征: 除非使用选项-O指明优化级别,否则不
会
有函数
会
被真正的、内嵌式的展开。这样做是为了简化调试器的用法。如果函数的属性为always_inline,他就
会
被迫展开为内嵌函数 声明内嵌函数的结果可以使代码更大或者更小,这依赖于函数的尺寸、建立调用框架的复杂
C++ 语言
64,639
社区成员
250,578
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章