我正在尝试实现我自己的类,它有一个unordered_map作为成员。现在奇怪的是,当我使用指向我的类的指针调用成员函数时,我遇到了分段错误,而当我不使用指针时一切都很好。
我附上了一个复制问题的最小工作示例。我使用Ubuntu 14.04和gcc版本4.8.4(Ubuntu 4.8.4-2ubuntu1~14.04.3),并用g++ -std=c++11 TestClass.cc
编译我的代码。你能告诉我出了什么问题吗?
非常感谢!
TestClass.h:
#include <unordered_map>
#include <vector>
#include <iostream>
using namespace std;
// payload class, which is stored in the container class (see below)
class TestFunction {
public:
void setTestFunction(vector<double> func) {
function = func;
}
void resize(vector<double> func) {
function.resize(func.size());
}
private:
vector<double> function;
};
// main class, which has an unordered map as member. I want to store objects of the second class (see above) in it
class TestContainer {
public:
void setContainer(int index, TestFunction function) {
cout << "Trying to fill container" << endl;
m_container[index]=function; // <---------------- This line causes a segfault, if the member function is used on a pointer
cout << "Done!" << endl;
}
private:
unordered_map<int,TestFunction> m_container;
};
主程序TestClass.cc:
#include <TestClass.h>
int main(void) {
//define two objects, one is of type TestContainer, the other one is a pointer to a TestContainer
TestContainer testcontainer1, *testcontainer2;
// initialize a test function for use as payload
TestFunction testfunction;
vector<double> testvector = {0.1,0.2,0.3};
// prepare the payload object
cout << "Setting test function" << endl;
testfunction.resize(testvector);
testfunction.setTestFunction(testvector);
// fill the payload into testcontainer1, which works fine
cout << "Filling test container 1 (normal)" << endl;
testcontainer1.setContainer(1,testfunction);
// fill the same payload into testcontainer2 (the pointer), which gives a segfault
cout << "Filling test container 2 (pointer)" << endl;
testcontainer2->setContainer(1,testfunction);
return 0;
}
答案 0 :(得分:1)
您没有初始化testcontainer2。这就是为什么当你尝试使用它时会出现seg错误的原因。