我想在地图中添加一个新条目,但是我收到一个分段错误消息。

class A {

};

class B {
public:
    std::map<int, std::vector<A*> > m;
};

int main() {
    A *a = (A*)malloc(sizeof(A));
    B *b = (B*)malloc(sizeof(B));
    b->m[0].push_back(a);
    return 0;
}


我在执行b-> m [0] .push_back(a)时遇到错误。

最佳答案

切勿在C ++中使用malloc,而始终使用new

因为您正在使用malloc,所以构造函数永远不会被调用,因此您的m处于未定义状态。访问时显示未定义的行为。

此外,m存储指向A的指针,这意味着使用[]访问时默认构造的元素是nullptr,甚至更多的UB。

也就是说,实际上从不使用原始的new,而仅使用基于范围的自动生存期或std::unique_ptr

关于c++ - 插入 map 时出现段错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48215100/

10-16 04:53