如何在结构中声明时在 Map 中插入值


struct try
{
    int elem;
    map<int , int *> mymap;
}; // simple structure containing int and a map
struct try * var; // pointer to try structure
var = (struct point *) malloc(sizeof(struct point )); 
var->mymap[1]=(int * )malloc(sizeof(int)); // want to add(1,pointer to integer)

由于最后一行显示分离错误

你应该

使用new而不是malloc

struct point
{
    int elem;
    map<int , int *> mymap;
}; // simple structure containing int and a map
point * var; // pointer to try structure
var = new point; 
var->mymap[1]=new int;

实际上,new分配内存并调用构造函数。在这里,对于仅分配内存的malloc,不会调用成员mymap的构造函数,因此mymap仍未初始化,因此在使用它时会得到未定义的行为。

当你使用 C++ => new/delete 而不是 malloc/free 时,不要编写类似 C 的代码

我认为在您的struct中添加一个析构函数可能是一件好事,它将删除mymap中的剩余指针以避免内存泄漏

最后,如果您使用 C++11 或更高版本,请查看智能指针:std::unique_ptrstd::shared_ptr 或对于旧版本的 C++,来自 boost 智能指针的等效类:

struct point
{
    int elem;
    map<int , std::shared_ptr<int>> mymap;
}; // simple structure containing int and a map
// for c++14 or greater:
auto var = std::make_unique<point>(); 
//or c++11:
std::unique_ptr<point> var(new point);
// for both
var->mymap[1]=std::make_shared<int>();

相关内容

  • 没有找到相关文章

最新更新