posts - 274,  comments - 1258,  trackbacks - 0
要重新建立一组条件反射了:
    pure virtual method called(纯虚函数被调用)=> object destroyed(对象已析构)=> std::vector reallocated(std::vector发生了重新分配内存)
    思维还是太死板啊!其实早就应该想到了~

    事情呢,其实是这样子滴:
  • 首先呢,我写了一门类似JavaScript的脚本语言,给它取了个华丽丽的名字叫做VScript;
  • 然后呢,这个脚本语言支持函数调用,可以调用C++编写的函数;
  • 调用函数的时候呢,不小心掉了一个参数;
  • 参数列表呢,是使用std::vector来传递的;
  • 于是呢,当C++函数体使用到没有传过来的参数时,就导致了std::vector的自动增长;
  • 这个自动增长呢,刚好又遇上了内存重新分配(std::vector每增长两倍重分配一次内存)
  • 所以呢,前面的参数就华丽丽地析构掉了~(啊!!!)
  • 最后呢,我使用前面的参数就会导致纯虚函数被调用啦~
  • 解决的办法呢,很简单:把std::vector换成std::deque就搞定啦~

P.S.: 太奇怪的问题,问google,比问GDB要好。


posted on 2009-02-22 14:50 踏雪赤兔 阅读(1834) 评论(5)  编辑 收藏 引用 所属分类: 玩转编程

FeedBack:
# re: [C++]早就该想到了~
2009-03-02 11:40 | oil painting
不是想象的那么容易的  回复  更多评论
  
# re: [C++]早就该想到了~
2009-03-13 23:39 | vczh
你的对象有复制构造函数或者重载了operator=的话,才能放进vector,不然就会发生各种神奇的事情- -b  回复  更多评论
  
# re: [C++]早就该想到了~
2009-03-14 14:48 | 踏雪赤兔
@vczh
呵呵~这个我是知道的~我这里出问题是因为存在外部的引用  回复  更多评论
  
# re: [C++]早就该想到了~
2009-05-12 08:57 | vczh
原来是你加了我校内啊。  回复  更多评论
  
# re: [C++]早就该想到了~
2009-05-12 11:28 | 踏雪赤兔
@vczh
向牛人学习~  回复  更多评论
  
只有注册用户登录后才能发表评论。

百度空间| 见闻日记| 编程感悟
我的twitter


LOGO

自我介绍:百度厂基础平台车间的一名挨踢民工。擅长C++、算法、语言设计、分布式计算,也用过Java,Python, PHP,JS/AS等语言开发。请关注我的twitter (免翻墙版) 发QQ消息


添加到收藏夹 Locations of visitors to this page

常用链接

随笔分类(300)

随笔档案(274)

文章分类(38)

相册

收藏夹(54)

与博主互动

博客手拉手

搜索

  •  

积分与排名

  • 积分 - 392918
  • 排名 - 10

最新评论

阅读排行榜

评论排行榜