C++でhash_mapを初めて使用しています。私はテーブルをハッシュマップに変換する必要があります。サイズがゼロのときの最初の検索時にhash_mapがクラッシュする
これは私がマイクロソフトのVisual Studioを使用しています宣言し、私のプログラムで
を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;
}
このコードは正常に動作しますが、私は私のプロジェクトアプリケーションのクラッシュの一部としてそれを実行しようとします。マップにエントリがない場合でも、set関数内のhIterが不良ポインタを返しています。 memeory corruptionのせいか?助けてもらえますか?
ヒープ破損の場合、どうすればこの問題を回避できますか?とにかく、このサイズのhash_mapを作成すると言うことができますか?
'hash_map'(または非標準コンテナ)を使用する必要がありますか? 'std :: map'だけでは使えませんか? – birryree
hash_mapはMicrosoft Visual Studio専用ですので、将来の標準のためにunordered_mapを学ぶことを検討してください。 – unsym