c++报错:Segmentation fault (core dumped)
同一种报错提示,不代表实质的相同的错误。
我的错误原因是在定义map类型数据时使用了指针,当插入数据时,就出现上面报错。
我的错误的大致写法如下:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
#include <iostream> #include <cstring> #include <map> #include <utility> // pair class Localhost { ... } class Cookie { ... void action(std::string){ ... } ... } class Document { Localhost * m_localhost; // 成员对象不能用指针,错在这里 Cookie * m_cookie; // 成员对象不能用指针,错在这里 public: Document(); ~Document(); void init(std::map<std::string, std::string>* config); ...... } void Document::init (std::map<std::string, std::string>* config) { for(std::map<std::string, std::string>::iterator it = config->begin(); it != config->end(); it++) { if(it->first == "localhost") { this->m_localhost.action(it->second); } else if (it->first == "cookie") { // 错误路线 2,在这里,就过不去了 this->m_cookie.action(it->second); } } } int main() { std::map<std::string, std::string> m1; // 这里是错误的,不应该用指针 m1.insert(std::pair<std::string, std::string>("cookie", "v1")); m1.insert(std::pair<std::string, std::string>("localhost", "v2")); Document document; // 错误路线 1 document.init(&m1); return 0; } |
因为源码繁杂,上面是我按错误原理写的源码。
错误的原因就是,当对象的下级对象,不能使用指针操作。
但是不能保证使用其它方法,是否对象下的对象可以使用指针。