C++ C+的可能原因是什么+;无序映射以生成以下gdb输出?
我使用的是C++11中的无序映射,它的键是由各种数字和字符组成的串接字符串。我正在使用的密钥示例如下:C++ C+的可能原因是什么+;无序映射以生成以下gdb输出?,c++,unordered-map,C++,Unordered Map,我使用的是C++11中的无序映射,它的键是由各种数字和字符组成的串接字符串。我正在使用的密钥示例如下: coeff_key=“”+到_字符串(第一个索引)+“”+到_字符串(第二个索引)+”+“”+到_字符串(i)+“”+到_字符串(j)+” 我可以填充所有地图,但一旦我尝试访问某个密钥,就会出现问题。此外,如果first_k_index的值可以是0-3,则不会出现错误。但是如果first_k_index的值可以是0-9,则代码不会完全运行。这是gdb的输出 terminate called a
coeff_key=“”+到_字符串(第一个索引)+“”+到_字符串(第二个索引)+”+“”+到_字符串(i)+“”+到_字符串(j)+”代码>
我可以填充所有地图,但一旦我尝试访问某个密钥,就会出现问题。此外,如果first_k_index
的值可以是0-3,则不会出现错误。但是如果first_k_index
的值可以是0-9,则代码不会完全运行。这是gdb的输出
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
Program received signal SIGABRT, Aborted.
0x00002aaab1d2a387 in raise () from /lib64/libc.so.6
Missing separate debuginfos, use: debuginfo-install glibc-2.17-307.el7.1.x86_64 libgcc-4.8.5-39.el7.x86_64 libstdc++-4.8.5-39.el7.x86_64
(gdb) where
#0 0x00002aaab1d2a387 in raise () from /lib64/libc.so.6
#1 0x00002aaab1d2ba78 in abort () from /lib64/libc.so.6
#2 0x00002aaab15357d5 in __gnu_cxx::__verbose_terminate_handler() () from /lib64/libstdc++.so.6
#3 0x00002aaab1533746 in ?? () from /lib64/libstdc++.so.6
#4 0x00002aaab1533773 in std::terminate() () from /lib64/libstdc++.so.6
#5 0x00002aaab1533993 in __cxa_throw () from /lib64/libstdc++.so.6
#6 0x00002aaab1533f2d in operator new(unsigned long) () from /lib64/libstdc++.so.6
#7 0x00002aaab1533fc9 in operator new[](unsigned long) () from /lib64/libstdc++.so.6
#8 0x00000000004035b6 in main ()
有多种可能的原因,最可能的原因是没有足够的内存来构建映射。
另见:
此问题显示的代码不符合stackoverflow.com的要求。这意味着这里的任何人都不可能最终回答这个问题;但最多只能猜测。你的问题应该显示一个最小的例子,不超过一到两页的代码(“最小”部分),其他人可以剪切/粘贴、编译、运行和复制所描述的问题(“可复制”部分),完全如图所示(这包括任何辅助信息,如程序输入)。有关更多信息,请参阅。在调用堆栈中有operator new[]
,但标准容器使用std::allocator::allocate
,它只调用operator new
,因此可能在代码中的其他地方