gpt4 book ai didi

c++ - 当大小为零时,hash_map 在第一次查找时崩溃

转载 作者:行者123 更新时间:2023-11-30 01:30:30 30 4
gpt4 key购买 nike

我是 c++ 中的 hash_map 的新手。我必须将表转换为散列图。

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

我正在使用 Microsoft Visual Studio。

#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 也会返回错误的指针。这是因为内存损坏吗?你能帮忙吗?

如果是堆损坏,我该如何避免呢?无论如何,我可以说创建一个具有这种大小的 hash_map 吗?

最佳答案

hash_multimap <const char*, long >不做你认为它做的事。关键是指针而不是字符串。你的小程序能正常工作是因为编译器对 "SwitchId" 使用相同的内存字符串文字。在较大的项目中情况并非如此。

使用 std::string作为一个键,而在这里,切换到 std::unordered_multimap .

关于c++ - 当大小为零时,hash_map 在第一次查找时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4415191/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com