stl map key 为指针时delete指针的问题
代码如下:
do what you want 以后想delete申请的内存,此时报错_CrtIsValidHeapPointer,难道key只能用string?不能用pointer?如果要释放这些内存该怎么处理啊?坐等高手指教
struct cmp_str
{
bool operator()(const TCHAR *a, const TCHAR *b) const
{
return _tcscmp(a, b) < 0;
}
};
typedef std::map<const TCHAR*, int, cmp_str> TESTMAP
const TCHAR* ch1 = new TCHAR[_tcslen(_T("one")) + 1];
const TCHAR* ch2 = new TCHAR[_tcslen(_T("two")) + 1];
const TCHAR* ch3 = new TCHAR[_tcslen(_T("three")) + 1];
const TCHAR* ch4 = new TCHAR[_tcslen(_T("four")) + 1];
const TCHAR* ch5 = new TCHAR[_tcslen(_T("five")) + 1];
_tcsncpy(ch1, _T("one"), (_tcslen(_T("one")) + 1) * sizeof(TCHAR));
_tcsncpy(ch1, _T("two"), (_tcslen(_T("two")) + 1) * sizeof(TCHAR));
_tcsncpy(ch1, _T("three"), (_tcslen(_T("three")) + 1) * sizeof(TCHAR));
_tcsncpy(ch1, _T("four"), (_tcslen(_T("four")) + 1) * sizeof(TCHAR));
_tcsncpy(ch1, _T("five"), (_tcslen(_T("five")) + 1) * sizeof(TCHAR));
TESTMAP mapper;
mapper[ch1] = 1;
mapper[ch2] = 2;
mapper[ch3] = 3;
mapper[ch4] = 4;
mapper[ch5] = 5;
/* do what you want */
delete []ch1;
delete []ch2;
delete []ch3;
delete []ch4;
delete []ch5;
do what you want 以后想delete申请的内存,此时报错_CrtIsValidHeapPointer,难道key只能用string?不能用pointer?如果要释放这些内存该怎么处理啊?坐等高手指教
...全文
相关推荐
C++如何删除map容器中指定值的元素详解
- `size_type erase(const KEY_TYPE &key)`:删除所有值为key的元素。删除map中具有指定值的元素,通常需要遍历整个容器,并检查每个元素的值。
Effective STL
当使用包含new分配的指针的容器时,请记住在容器销毁前删除这些指针(When using containers of newed pointers, remember to delete the pointers
C++手写分布式KV引擎[源码]
哈希表部分并非简单封装std::unordered_map,而是自主实现了开放寻址法结合二次探测的散列策略,规避了标准容器在高负载下因频繁rehash导致的性能抖动问题;双向链表则完全脱离STL依赖,使用裸指针与内存池预分配技术
map和pair配合使用.pdf
一、map 和 pair 的概念map 可以理解为一个容器,用于存储键值对(key-value)。每个键值对由一个键(key)和一个值(value)组成。map 的键是惟一的,不能重复,而值可以重复。
容器和算法面经.docx
- **map** 是一个关联容器,存储键值对(key-value pairs),每个键都是唯一的,并通过键进行排序。键用于索引,值则与键相关联。


