读书人

CArray析构函数有关问题

发布时间: 2013-05-02 09:39:29 作者: rapoo

CArray析构函数问题
void fun1(CArray<My struct ,My struct&> & data1,cosnt CArray<CString ,CString&> &data2 ,...)
void fun2(CArray<CString ,CString&> & data2 ,...)

调用;
CArray(My struct ,My struct&) data1;
CArray<CString ,CString&> data2;
fun2(data2 ,...);
fun1(data1 ,data2 ,...);

此时数据都是正确的但是程序运行崩溃了,调试时发现,在程序最后调用CArray的析构函数式程序崩溃了,是什么问题呢?
[解决办法]
析构函数式程序崩溃应该是资源泄露造成的,是不是new了没有delete或者delete了非new的指针,或者重复delete了。
[解决办法]
对学习编程者的忠告:
眼过千遍不如手过一遍!
书看千行不如手敲一行!
手敲千行不如单步一行!
单步源代码千行不如单步对应汇编一行!

单步类的实例“构造”或“复制”或“作为函数参数”或“作为函数返回值返回”或“参加各种运算”或“退出作用域”的语句对应的汇编代码几步后,就会来到该类的“构造函数”或“复制构造函数”或“运算符重载”或“析构函数”对应的C/C++源代码处。

VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。

崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。

读书人网 >C++

热点推荐