xyjzsh
虚拟指针的问题——memset相关
class
Node
{
public
:
Node(
void
)
{}
~
Node(
void
)
{}
virtual
bool
IsLeafNode()
=
0
;
}
;
class
InternalNode:
public
Node
{
public
:
InternalNode()
{}
virtual
~
InternalNode(
void
)
{}
virtual
bool
IsLeafNode()
{
return
false
;}
}
;
class
LeafNode:
public
Node
{
public
:
LeafNode()
{}
virtual
~
LeafNode()
{}
virtual
bool
IsLeafNode()
{
return
true
;}
}
;
定义以上的继承结构:LeafNode和InternalNode继承自Node
有一个虚方法IsLeaf来判断是否为叶子节点。
下面有这样的测试代码:
test()
{
Node *node = new InternalNode();
memset(node,0,sizeof(InternalNode));
node->IsLeafNode();
}
上述代码编译正常,而运行时出错!
出现上述问题的原因是:
对于有虚函数的类,每一个类有一个虚函数表,而每一个对象中会有一个指针指向这个虚函数表。
当 Node *node = new InternalNode();时编译器会把一个指针知道InternalNode的虚函数表
但是memset(node,0,sizeof(InternalNode));却把这个指针设成了。
所以在调用的时候出现了运行时错误!
posted on 2011-03-14 15:46
呆人
阅读(433)
评论(0)
编辑
收藏
引用
所属分类:
数据结构
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
一种类型的字符拷贝函数
猜猜执行结果
返回值为函数指针的写法
c语言中模拟动态绑定
按位使用数据以及union
宏定义中字符串连接操作
虚拟指针的问题——memset相关
使用位
适合于网络传输的一种数据结构
指向类成员对象的指针
网站导航:
博客园
IT新闻
BlogJava
博问
Chat2DB
管理
<
2011年3月
>
日
一
二
三
四
五
六
27
28
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
导航
C++博客
首页
新随笔
联系
聚合
管理
统计
随笔 - 59
文章 - 0
评论 - 11
引用 - 0
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(1)
给我留言
查看公开留言
查看私人留言
随笔分类
git使用(1)
(rss)
gtest研究(1)
(rss)
sqlserver2008(3)
(rss)
STL学习系列(1)
(rss)
编程习惯系列(5)
(rss)
多线程(1)
(rss)
感悟(1)
(rss)
书评(2)
(rss)
数据结构(12)
(rss)
算法(9)
(rss)
完成端口(1)
(rss)
随笔档案
2013年2月 (1)
2012年4月 (1)
2012年2月 (1)
2011年12月 (1)
2011年11月 (3)
2011年10月 (1)
2011年8月 (2)
2011年7月 (1)
2011年5月 (4)
2011年4月 (2)
2011年3月 (3)
2011年2月 (2)
2011年1月 (5)
2010年12月 (11)
2010年11月 (13)
2010年10月 (8)
搜索
最新评论
1. re: do{}while(0)的好处【转】
说的好。哈哈
--xiaomu
2. re: c++ 中关于int,unsigned int , short的关系与应用
评论内容较长,点击标题查看
--婷
3. re: vs2008只生成dll,没有生成lib的解决方案
非常感谢,解决了我的大问题。
--jasion
4. re: 读写锁的实现
@joy
你好,谢谢你,(*^__^*) 嘻嘻……,我看了一下代码写操作确实有饿死的可能,然后我重新修改了一下代码,有空你看看哈。(*^__^*) 嘻嘻……还请多赐教哦~~
-- 呆人
5. re: 读写锁的实现[未登录]
写操可能会饿死
--joy
阅读排行榜
1. c++ 中关于int,unsigned int , short的关系与应用(21915)
2. memcpy,_tcscpy_s的使用(12810)
3. 1.VC++中的char,wchar_t,TCHAR(转载)(8446)
4. vs2008中调用matlab生成的dll(4564)
5. 宏定义中字符串连接操作(4502)
评论排行榜
1. c++编程习惯(1)(2)
2. 编程习惯(2)(2)
3. 读写锁的实现(2)
4. do{}while(0)的好处【转】(1)
5. vs2008只生成dll,没有生成lib的解决方案(1)
Powered by:
C++博客
Copyright © 呆人