2 liulizhi12345 liulizhi12345 于 2016.09.07 12:23 提问

c++ map插入数据,导致段错误

出错时堆栈信息:
#0 0x001a03f0 in std::string::compare () from lib/libstdc++.so.6
#1 0x003c4b56 in std::operator< , std::allocator > (__lhs=@0x91a4228, __rhs=@0x96b1afc4)
at /usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/basic_string.h:2213
#2 0x003c4b74 in std::lessstd::string::operator() (this=0x91a4218, __x=@0x91a4228, __y=@0x96b1afc4)
at /usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_function.h:227
#3 0x017d4e25 in std::_Rb_tree, std::_Select1st >, std::lessstd::string, std::allocator > >::lower_bound (this=0x91a4218, __k=@0x96b1afc4)
at /usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_tree.h:1371
#4 0x017d4ea3 in std::map, std::allocator > >::lower_bound (this=0x91a4218, __x=@0x96b1afc4) at /usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_map.h:576
#5 0x017dbbf2 in std::map, std::allocator > >::operator at /usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_map.h:345

出错的语句:
pEntity->m_mapID[log.strID]=log;
我对stl不太了解,请问这个错误可能是什么什么原因?

6个回答

hijack00
hijack00   Rxr 2016.09.07 12:33

感觉你把代码贴出来更容易找到错误。感觉使用STL时编译器给出的出错信息好多并没什么用

oyljerry
oyljerry   Ds   Rxr 2016.09.07 13:44

log.strID 这个字符串是不是一个合法的字符串

wzxq123
wzxq123   Rxr 2016.09.07 14:38

pEntity->m_mapID[log.strID]=log;这里面的变量类型你得贴出来啊,要不怎么知道问题在哪

coding_hello
coding_hello   2016.09.07 20:46

看着像strID不对,上代码吧

fengxuxing
fengxuxing   2016.09.08 17:02

pEntity->m_mapID[log.strID]=log;

确定好pEntity,pEntity->m_mapID,log.strID,log这几个变量都是合法的,也就是在内存中没有被释放。

feng1790291543
feng1790291543   Ds   Rxr 2016.09.09 12:19
 pEntity->m_mapID[log.strID]=log;

这句,先判断 pEntity 是否为null, 在判断 pEntity->m_mapID 是否为null,在判断 log.strID是否合法, 在判断 pEntity->m_mapID是否已满,在判断
log 是否 合法

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
C语言memcpy 断错误
在LINUX下写类似如下程序时,出现段错误 int main() { char *a="11111111"; char *b ="2222222"; printf("before a:%s b:%s\n",a,b); memcpy(a,b,8); printf("after a:%s b:%s\n"
常见段错误
在Linux内存管理中,Linux结合了CPU架构采用了分段机制; 分段就是将内存分成大小不同的段空间,将进程之间和进程内部不同数据段之间隔离起来; 当程序内存的数据的访问超出了系统所给这个程序数据段的范围,系统就会给进程发送一个信号SIGSEGV,程序将终止退出。 所以,可以说段错误都是对内存操作错误引起的。 这里列举了常见的段错误: 1.访问不存在的内存、访问未知的受保护的内存;
C语言 递归中的段错误与栈溢出
C语言中,每次递归调用都会多一个栈帧——和普通的函数调用并没有什么不同。由于使用了调用栈,C语言自然支持了递归。在C语言的函数中,调用自己和调用其他函数并没有任何本质区别,都是建立新栈帧,传递参数并修改当前代码行。在函数体执行完毕后删除栈帧,处理返回值并修改当前代码行。 递归调用时新建了一个栈帧,并且跳转到了函数开头处执行,同一时刻可以有多个栈帧,但“当前代码行”只有一个。 “段”(segme
linux段错误
关于主函数中int main(int argc, char **argv), 第一个参数argc是传入主函数中参数的个数, *argv则是具体的参数, 如argv[0]="localhost",argv[1]="baidu.com" 下面为段错误, Segmentation fault (core dumped) 一般都是getchar等输入函数引起的,是指程序要求输入参数
C语言sprintf使用出现段错误
#include #include void Block(int function_no,int instrument_no) { char *function; char *instrument; char *result; sprintf(function,"%d",function_no); sprintf(instrument,"%d",instrument_no);
一个多线程问题引发的血案-(代码段执行完毕,子进程未执行完毕导致段错误)
多线程容易忽略的问题导致的段错误
C语言段错误 总结 段错误整理
C语言段错误 总结 段错误整理 C语言段错误 总结 段错误整理
linux下C编程free()时出现飘忽诡异的段错误(核心已转储)问题
先说一下问题现场。 代码如下 free(volthisframe->Tops); free(volthisframe->Bots); printf("what\n"); free(volthisframe->SCTops); free(volthisframe->SCBots); 运行时出现段错误,“what”随机出现,也就是说可能是打印前出现段错误,也可能是打印后出现
ERROR:C++ 字符指针引起的段错误
问题: 程序编译通过,运行异常终止。 进入调试模式,报段错误。 分析: 逐行调试,在为char指针所指内容修改时出错。 原因: char *c = "abc" 此时,无法根据指针来修改字符串内容。 //example 1: char str[12] = "Hello"; //字符串用数组开辟的,它是可以改变的变量。 char *p
结构体指针之 段错误 详解(segmentation fault)
一个网友问了我一个问题,一个C程序运行出现了段错误,这个问题非常好,很多初学者都容易犯这个错误,具体代码如下: 这个编译没有问题,但是运行是段错误    Segmentation fault 因为你定义了一个结构体指针p,用来指向此类结构体,但是你却没有给他赋值,此时p的值为NULL,你并没有在内存中为p分配任何空间,所以p->a=1这句就会出段错误。 修改方法1:可