std::map的KEY如果是char*,必须是malloc的

简介: std::map的KEY如果是char*,必须是malloc的
    std::map<char*, GhRecord*>::iterator funcIter = g_oRecordFunctionMap.begin();
    while (funcIter != g_oFunctionMap.end())
    {
        GhRecord* pFuncRecord = funcIter->second;
        funcIter++;
        ...
    }

出错的位置都是funcIter++处.有两种情形:

  1. 卡死.
  2. 崩溃.错误也是很奇怪:
#0  0x00007fcf790ff458 in std::less<char*>::operator() (
    this=0x7fcf79302420 <g_oRecordFunctionMap>, 
    __x=@0xf8: <error reading variable>, 
    __y=@0x7fcf45199060: 0x7fcf28042400 "tcpclient.c-tcpclient_recv-71")
    at /usr/include/c++/5/bits/stl_function.h:387
387       { return __x < __y; }
或者
_Rb_tree_increment(std::_Rb_tree_node_base const*) () from /usr/lib

难道吾使用方式不对?吾反复核查,都没有发现问题.


后来输出funcIter->first,发现是乱码.嗯?于是把KEY改成malloc()的,不再出错了.


当然,改用std:;string应该也可以.

目录
相关文章
|
7月前
|
存储 安全 Go
|
Go C# C语言
【GoLang 笔记】遍历 map 时的 key 随机化问题及解决方法
【GoLang 笔记】遍历 map 时的 key 随机化问题及解决方法
|
1月前
|
存储 Java API
Java交换map的key和value值
通过本文介绍的几种方法,可以在Java中实现Map键值对的交换。每种方法都有其优缺点,具体选择哪种方法应根据实际需求和场景决定。对于简单的键值对交换,可以使用简单遍历法或Java 8的Stream API;对于需要处理值不唯一的情况,可以使用集合存储或Guava的Multimap。希望本文对您理解和实现Java中的Map键值对交换有所帮助。
34 1
|
6月前
|
存储 Java API
探讨Java中交换Map的Key和Value值的技术
探讨Java中交换Map的Key和Value值的技术
53 2
|
6月前
|
存储 缓存 Java
Java交换map的key和value值
在Java中,直接交换`Map`的key和value是不允许的,因为key是唯一的且不可变。不过,可以通过创建新`Map`实现交换:将原`Map`的value作为新key,key作为新value。注意,如果原`Map`有重复value或null,需额外处理。以下是一个代码示例,展示了如何在value唯一且非null的情况下交换`Map`的key和value。对于重复value或null值的情况,可以使用`List`存储多个key或忽略null值。在实际应用中,`Map`常用于缓存、配置管理、数据库结果映射等多种场景。
78 1
|
7月前
|
Java API
List转Map(id为key,list为value)
List转Map(id为key,list为value)
276 0
|
7月前
|
存储 索引
Map存储两个key:Duplicate key 6
Map存储两个key:Duplicate key 6
290 0
|
7月前
|
Python
python 判断 map中是否存在key为a的值
在Python中,你可以使用`in`关键字来判断一个key是否存在于map(字典)中。例如: ```python my_map = {'a': 1, 'b': 2, 'c': 3} if 'a' in my_map: print('Key "a" exists in the map') else: print('Key "a" does not exist in the map') ``` 这段代码会输出"Key 'a' exists in the map",因为字典`my_map`中存在key为'a'的值。
409 1
jdk8 Stream流中将集合转成map,重复key处理,统计最大值,获取某个属性集合等10种最常用方法
jdk8 Stream流中将集合转成map,重复key处理,统计最大值,获取某个属性集合等10种最常用方法
182 5
|
7月前
|
存储 前端开发 Java
Java【代码分享 13】前端动态添加一条记后端使用JDK1.8实现map对象根据key的部分值进行分组(将map对象封装成指定entity对象)
Java【代码分享 13】前端动态添加一条记后端使用JDK1.8实现map对象根据key的部分值进行分组(将map对象封装成指定entity对象)
52 0