我在头文件中声明了一个map变量,并尝试从cpp文件中的方法向此插入一些值。
在标题(.h
)文件中,
class Test
{
public:
void AddName(const std::string& name, const std::string& value);
private:
std::map<std::string, std::string> m_names;
};
在.cpp
文件中,
void Test::AddName(const std::string& name, const std::string& value)
{
m_names.insert(std::pair<std::string, std::string>(name, value));
}
此方法抛出错误:&#34; 0xC0000005:访问冲突读取 位置0x0000000000000150。&#34;
但是,如果我在此AddName method
中声明此地图变量,则没有错误。
我从另一个具有必需参数的类调用此AddName方法。
TestPtr test = nullptr;
test->AddName(nodeDetails.Attribute("Name"), nodeDetails.Attribute("Value"));
问题是什么?
答案 0 :(得分:1)
test
对象在使用之前必须进行实例化:
TestPtr test;
test.addName(...);
或动态分配(使用new
)
TestPtr* test = new TestPtr();
test->AddName(...);
//
//...
//
//And don't forget to free memory
delete test;
(在你的情况下,第一种方法更“内存安全”;))