C++ 尝试ptr时出现分段错误->;map.clear()
我有一个C++ 尝试ptr时出现分段错误->;map.clear(),c++,segmentation-fault,malloc,C++,Segmentation Fault,Malloc,我有一个 struct trie { map< char, struct trie* > m; }; typedef struct trie trie; 但当我这么做的时候 root->m.clear(); 它给出了一个分段错误。 我不明白为什么 malloc函数分配所需的内存,但不生成新对象 解决方案1 相反,请使用new关键字: trie* root = new trie(); 在你的程序结束时,别忘了用 delete root; 解决方案2 另一种选择是在
struct trie {
map< char, struct trie* > m;
};
typedef struct trie trie;
但当我这么做的时候
root->m.clear();
它给出了一个分段错误。
我不明白为什么 malloc函数分配所需的内存,但不生成新对象 解决方案1 相反,请使用
new
关键字:
trie* root = new trie();
在你的程序结束时,别忘了用
delete root;
解决方案2
另一种选择是在堆栈上生成此对象,而不使用指针。
这将按以下方式进行:
trie root;
在这种情况下,分配给此对象的内存将在作用域结束时自动释放。
(trie*)malloc(sizeof(trie))代码>是错误的!应该是new trie()代码>。您不能使用malloc
初始化非POD类型。您还应该删除该c-styletypedef struct trie代码>。你不需要C++,但是我以前使用过这种初始化,它可以工作。它可以像上面提到的POD类型工作。但是这里有一个std::map
,它要求在内存分配之后调用它的构造函数。这就是new
所做的。
trie root;