社区
C++ 语言
帖子详情
调用析构函数时异常
ghost5216
2011-06-15 09:47:33
//Class A
。。。。。。
A* a = new A();
.....
delete a;
这时
A::~A()
{
}
中出现异常,而且析构函数中没有任何代码,停在最末尾的}。异常0xc0000005
请问这是怎么回事?
谢谢
...全文
149
15
打赏
收藏
调用析构函数时异常
//Class A 。。。。。。 A* a = new A(); ..... delete a; 这时 A::~A() { } 中出现异常,而且析构函数中没有任何代码,停在最末尾的}。异常0xc0000005 请问这是怎么回事? 谢谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
pathuang68
2011-06-15
打赏
举报
回复
在析构函数中随便写一句输出,然后单步调试吧。
恨天低
2011-06-15
打赏
举报
回复
[Quote=引用 13 楼 ghost5216 的回复:]
引用 10 楼 icechenbing 的回复:
析构调用两次?我咋看不出来阿?
只调用了一次就异常
[/Quote]LZ 无码无真相!
ghost5216
2011-06-15
打赏
举报
回复
[Quote=引用 10 楼 icechenbing 的回复:]
析构调用两次?我咋看不出来阿?
[/Quote]
只调用了一次就异常
恨天低
2011-06-15
打赏
举报
回复
LZ,你能不能贴出所有代码?
chary8088
2011-06-15
打赏
举报
回复
the problem shouldn't be in the deconstruct function, which is leaded to by other codes,check others
恨天低
2011-06-15
打赏
举报
回复
析构调用两次?我咋看不出来阿?
ghost5216
2011-06-15
打赏
举报
回复
[Quote=引用 7 楼 dizuo 的回复:]
那说明类构造的就有问题。
[/Quote]
类构造的时候会初始化成员
int类型没什么说的
会给一个结构体赋值
给两个线程类指针设置为NULL
A:A(void)
{
....
m_nNO = 0;
m_pQueryThread = NULL;//CWinThread * m_pQueryThread ;线程类指针
m_pSaveThread = NULL;//CSaveThread* m_pSaveThread;//class CSaveThread : public CWinThread
memset(&m_Status, 0, sizeof(REC_STATUS));
...
}
因为Init返回False所以pQueryThread 和pSaveThread 都没有new实例。
想不出问题在哪
至善者善之敌
2011-06-15
打赏
举报
回复
释放两次会抛出异常吗?
ryfdizuo
2011-06-15
打赏
举报
回复
那说明类构造的就有问题。
ghost5216
2011-06-15
打赏
举报
回复
[Quote=引用 5 楼 dizuo 的回复:]
delete a会进入析构函数,在析构函数中打断点看看哪里中断了?
[/Quote]
析构函数中没有任何代码,停在最末尾的}。异常0xc0000005
ryfdizuo
2011-06-15
打赏
举报
回复
delete a会进入析构函数,在析构函数中打断点看看哪里中断了?
ghost5216
2011-06-15
打赏
举报
回复
代码太多了真是不方便贴
//Class A
。。。。。。
A* a = new A();
.....
BOOL A::Init()
{
int ret = Open(id);
if(!ret)
{
.....
return FALSE;
}
}
Init返回FALSE时
delete a;
这时
A::~A()
{
}
中出现异常,
我分别在int ret = Open(id);
和return FALSE;
打了断点
奇怪的是int ret = Open(id);走了一次
return FALSE;确走了两次。
luciferisnotsatan
2011-06-15
打赏
举报
回复
访问违规。
把代码帖完整。包括类的成员变量,构造和析构函数的实现。
ryfdizuo
2011-06-15
打赏
举报
回复
代码贴全看看。
無_1024
2011-06-15
打赏
举报
回复
两次析构了 要把吧析构函数去掉 要么不要delete
显式
调用
析构函数
1。显式
调用
的
时
候,
析构函数
相当于的一个普通的成员函数2。编译器隐式
调用
析构函数
,如分配了对内存,显式
调用
析构的话引起重复释放堆内存的
异常
3。把一个对象看作占用了部分栈内存,占用了部分堆内存(如果申请了的话),这样便于理解这个问题 系统隐式
调用
析构函数
的
时
候,会加入释放栈内存的动作(而堆内存则由用户手工的释放) 用户显式
调用
析构函数
的
时
候,只是单纯执行
析构函数
内的语句,不会释放
C++显示
调用
析构函数
C++中new的用法及显示
调用
析构函数
最近被问到了C++内存池的问题,其中不免涉及到在指定内存地址
调用
对象构造函数以及显示
调用
对象
析构函数
的情况。 C++中new的用法 new是C++中用于动态内存分配的运算符,在C语言中一般使用malloc函数。 (1)plain new顾名思义就是普通的new,就是我们惯常使用的new。分配内存,
调用
构造函数,在C++中是这样定义的: 1 void* operator new(std::size_t) throw(std::bad_alloc); 2 v
[STL]显示
调用
析构函数
1:显式
调用
构造函数的
时
候,
析构函数
相当于的一个普通的成员函数,执行函数内部的语句 2:编译器隐式
调用
析构函数
,如果分配了堆内存,显式
调用
析构的话引起重复释放堆内存的
异常
(显示
调用
时
释放一次堆内存,隐式
调用
时
又释放一次堆内存) 3:把一个对象看作占用了部分栈内存,占用了部分堆内存(如果申请了的话),这样便于理解这个问题,系统隐式
调用
析构函数
的
时
候,会加入释放栈内存的动作(而堆内
析构函数
小结
析构函数
析构函数
是一个特殊的成员函数,其作用与构造函数相反,它的名字是类的名字前面加一个“~”符号,在c++中这是位取反运算符,理解为
析构函数
是与构造函数作用相反的函数 以下四种情况程序会自动执行
析构函数
: 如果在一个函数中定义了对象(假设是自动局部对象),当这个函数被
调用
结束
时
,对象应该释放,在对象释放前自动执行
析构函数
静态局部对象在函数
调用
结束
时
对象并不释放,因此也不
调用
析构函数
,只有在...
构造函数、
析构函数
抛出
异常
的问题
目录 引子 1. 抛出
异常
1.1 抛出
异常
语句格式 1.2 嵌套
调用
的
异常
处理
时
机 2.构造函数可以抛出
异常
吗? 3.
析构函数
可以抛出
异常
吗? 3.1 more effective c++提出
析构函数
不能抛出
异常
的两点理由 4.如何处理
析构函数
中的
异常
? 4.1
析构函数
内部消化
异常
4.2主动关闭程序 4.3把可能抛出
异常
的代码移出
析构函数
引子 先看一个程序,会输出什么? struct A { A() { cout << "A" <<...
C++ 语言
64,643
社区成员
250,475
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章