当size为零时,hash_map在第一次查找期间崩溃

mit*_*una 1 c++ hashmap

我是c ++中hash_map的新手.我必须将表转换为hashmap.

这就是我在程序中声明和使用hash_map的方法

我正在使用微软视觉工作室.

#include <hash_map>
using namespace stdext;
typedef hash_multimap <const char*, long > HEAPTABLE;

typedef HEAPTABLE::iterator HEAP_ITER;

class CTest
{

public:

 void setSwitchID(long i);
 long getSwitchID();
 void isUpgrading(bool bTest);
private:

 HEAPTABLE m_hashMap;
};

void CTest::setSwitchID(long dwID)
{


 HEAP_ITER hIter = m_hashMap.find("SwitchId");
 if (hIter != m_hashMap.end())
 {
  hIter->second = dwID;
 }
 else
 {
  m_hashMap.insert(make_pair("SwitchId", dwID));
 }

}

long CTest::getSwitchID()
{

 HEAP_ITER hIter = m_hashMap.find("SwitchId");
 if (hIter != m_hashMap.end())
 {
  return hIter->second;
 }
 return 0;

}

int _tmain(int argc, _TCHAR* argv[])
{

  CTest* test = new CTest;
          if (test)
          {

  test->setSwitchID((DWORD)i);
  test->isUpgrading(false);
         }
 delete test;
 return 0;

}
Run Code Online (Sandbox Code Playgroud)

当我将它作为一个单独的程序运行时,此代码工作正常,但当我尝试将其作为项目的一部分运行时,应用程序崩溃.即使地图中没有条目,set函数中的hIter也会返回错误的指针.这是因为记忆腐败吗?能否请你帮忙?

如果它是一个堆腐败,我怎么能避免这种情况?无论如何我可以说用这个大小创建一个hash_map吗?

Nik*_*sov 5

hash_multimap <const char*, long >不会做你认为它做的事情.关键是指针不是字符串.你的小程序运行良好的编译器使用相同的内存两个"SwitchId"字符串文字.在较大的项目中情况并非如此.

使用std::string作为重点,而不是和,而在这里,切换到std::unordered_multimap.