Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 尝试ptr时出现分段错误->;map.clear()_C++_Segmentation Fault_Malloc - Fatal编程技术网

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-style
typedef struct trie。你不需要C++,但是我以前使用过这种初始化,它可以工作。它可以像上面提到的POD类型工作。但是这里有一个
std::map
,它要求在内存分配之后调用它的构造函数。这就是
new
所做的。
trie root;