社区
C++ 语言
帖子详情
linux vector push_back 出现段错误!
喵了个咪78
2014-12-24 01:54:15
具体问题是这样的:
本人将windows上的代码移植到linux上,但是遇到vector push_back 的时候出问题 ,vector里面装的指针,指针的类型是自定义的类 ,实际push_back 的时候是将自定义类的子类push进去!但是会出问题,还请各位有经验的大神们给指点指点!
HELP HELP
...全文
816
5
打赏
收藏
linux vector push_back 出现段错误!
具体问题是这样的: 本人将windows上的代码移植到linux上,但是遇到vector push_back 的时候出问题 ,vector里面装的指针,指针的类型是自定义的类 ,实际push_back 的时候是将自定义类的子类push进去!但是会出问题,还请各位有经验的大神们给指点指点! HELP HELP
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
yangyunzhao
2014-12-25
打赏
举报
回复
1、贴代码,能不能先格式化一下啊,csdn有这个功能的,不然看着眼花。 2、既然都是移植到linux,能不能不用BOOL,看着好奇怪。 3、代码没有看出问题,你确定是push_back出的问题?用gdb跟踪一下呢,或者看看core文件。push_back一个指针,怎么会有问题,奇怪
赵4老师
2014-12-24
打赏
举报
回复
进程意外退出会在当前目录下产生‘core’文件或形如‘core.数字’的文件比如‘core.1234’ 使用命令 gdb 运行程序名 core或core.数字 进入gdb然后使用bt命令 可以查看进程意外退出前函数调用的堆栈,内容为从上到下列出对应从里层到外层的函数调用历史。 如果进程意外退出不产生core文件,参考“ulimit -c core文件最大块大小”命令
喵了个咪78
2014-12-24
打赏
举报
回复
1.下面的是一个中间的类的声明clss COCRComposite class COCRComposite : public COCRNode { public: COCRComposite(); virtual ~COCRComposite(); int GetSize(); virtual COCRNode* GetFirstChild(); virtual COCRNode* GetLastChild(); virtual BOOL DrawImage(CDC *pDC, double fScale); virtual BOOL Add(COCRNode * pNode); virtual BOOL Insert(COCRNode * pNode, int nPos); virtual BOOL RemoveAllElements(); virtual BOOL RemoveElement(int nPos); virtual BOOL RemoveElements(int nBeg, int nEnd);
vector<COCRNode*> m_Elements;
virtual void CloneElements(COCRNode* pDestNode); virtual void Accept(CNodeVisitor* pVisitor); COCRNode* GetNodeByPos(int nPos); protected: friend COCREngine; friend CEngineTHOCR; }; 2.接下来是虚函数virtual BOOL Add(COCRNode * pNode)的实现 BOOL COCRComposite::Add(COCRNode * pNode) { if(pNode == NULL) return FALSE; pNode->SetParent(this); m_Elements.push_back(pNode); return TRUE; } 3. 接下来是两个子类class COCRNodeText : public COCRComposite、class COCRNodeRow : public COCRComposite 主要是说明几个类之间的关系 4、下面的调用部分 COCRNodeText* pText = static_cast<COCRNodeText*>(lpUserParam); COCRNodeRow* pRow = dynamic_cast<COCRNodeRow*>(pFactory->CreateNode(COCRNode::NODETYPE_ROW)); pText->Add(pRow); 问题出在 pText->Add(pRow)里面的 m_Elements.push_back(pNode) 这,找了很多资料,但是没有搞明白具体是什么原因,还麻烦帮忙看看! 谢谢
ayrb13
2014-12-24
打赏
举报
回复
talk is cheap,show me the code
ri_aje
2014-12-24
打赏
举报
回复
代码..............
vector
push
_back后迭代器失效
vector
<
vector
<int> > vec = { { 2,0 }, { 1,1 } }; auto iter = vec.begin(); cout << (*iter)[0]; //正常 vec.
push
_back({ 1,1 }); cout << (*iter)[0]; //报错 其原因是
push
_back导致
vector
需要扩容,新分配一片内存再将原本的数据拷贝进去,而iter仍指向原本的内存空间,导致了迭代器失效。 所以在使用迭代.
vector
push
_back报错 是其他地方内存越界覆盖掉了后面的内存
最近在运行一个较大的程序,内存占用可能有点多,其中在
vector
.
push
_back()处报错,感到很奇怪。用g++ -std=c++11编译。 下面是与报错相关的部分。
vector
KATT; KATT.clear(); int KATT2; ...... ...... ...... KATT.
push
_back(KATT2); 程序输出及报错信息: KATT2 =
使用指针管理
vector
无法
push
_back
使用指针管理
vector
无法
push
_back
vector
push
_back数量大的时候变慢
才用15000个数据
push
_back耗时就好几秒, 解决方法是 先resize 15000, 然后再 for (int i = 0; i < 15000; i++) { Data data; m_dataVect[i] = data; } 没详细用时间戳试过减少多少时间,感觉可以节省5~10倍的时间。从4秒左右变为不到1秒。 这种就有点危险,自己要控...
记录C++中,
vector
的迭代器在
push
_back以后扩容导致迭代器失效的问题
vector
是我们用到最多的数据结构,其底层数据结构是单端动态数组,由于数组的特点,
vector
也具有以下特性: ①O(1)时间的快速访问;②顺序存储,所以插入到非尾结点位置所需时间复杂度为O(n),删除也一样;:根据
vector
的插入和删除特性,以及扩容规则,我们在使用
vector
的时候要注意,在插入位置和删除位置之后的所有迭代器和指针引用都会失效,同理,扩容之后的所有迭代器指针和引用也都会失效。
C++ 语言
65,189
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章