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_ptr
、std::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>();