免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1897 | 回复: 4
打印 上一主题 下一主题

[C++] 问个关于程序crash的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-05-23 17:02 |只看该作者 |倒序浏览
有class A、B、C和 struct D、E
B是C的子类,A是B的子类
D是E的子类(虽然用的是struct来定义,但在c++里和用class好像没大的区别)

D有成员函数D.function
A里面有一个D类型的成员变量:
class A : public B {
...
public:
D m_d;
...
}

直接声明D的实例,调用函数,没有问题:
D tmpD;
tmpD.function(...)

但如果new一个A的实例出来,如下调用就会crash:
A * tmpA = new A();
tmpA->m_d.function(...)
在调用function这里就crash了。代码写的比较简略,我可以确定new成功了,tmpA指针是有效的。

好奇怪的问题啊,我怎么都想不通。
有人碰到过类似的问题么?望不吝赐教!谢谢!

论坛徽章:
0
2 [报告]
发表于 2008-05-23 21:47 |只看该作者
应该不会吧,你进去看看为什么crash啊,gdb就用bt看看crash到哪里了

论坛徽章:
0
3 [报告]
发表于 2008-05-24 16:27 |只看该作者
LZ 没有说 function 是谁的方法, 是D 的还是从E继承来的?
还有 A B C 的继承关系,确保没有重名的变量和方法,不然容易出问题的。
另外,如果和继承没有关系的话,可以直接写代码测试一下吧。

论坛徽章:
0
4 [报告]
发表于 2008-05-26 10:55 |只看该作者
原帖由 chrisyan 于 2008-5-23 21:47 发表
应该不会吧,你进去看看为什么crash啊,gdb就用bt看看crash到哪里了


gdb不太会用……
bt看到的是这样的结果。我编译出来的是一个.so文件,不太会用gdb......
#0  0xffffe410 in __kernel_vsyscall ()
#1  0xb7d6bcd6 in std::basic_streambuf<char, std::char_traits<char> >::seekpos () from /lib/libc.so.6
#2  0xb7d6bacc in sleep () from /lib/libc.so.6
#3  0x08180293 in _main (argc=3, argv=0xbf9834e4) at core.cpp:142
#4  0x08352ab6 in main (argc=3, argv=0xbf9834e4) at main.cpp:95

function函数里会设置一个std::string的成员变量的值,不知是否问题在这里

论坛徽章:
0
5 [报告]
发表于 2008-05-26 14:23 |只看该作者
整个代码给出来啊,这怎么看?
crash可能由于一个你认为没问题而没告诉大家的地方
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP