C++ - std :: map.insert()分段错误

Hen*_*son 0 c++ dictionary insert segmentation-fault c++11

当我尝试插入地图时出现分段错误.

该函数看起来像这样:

void add(std::string id, std::string name)
{
Asset asset(nullptr, false, name);
mAssets.insert(std::make_pair<std::string, Asset>(id,asset)); <-- This line gives segfault
}
Run Code Online (Sandbox Code Playgroud)

简单声明了mAssets

std::map<assetID, Asset> mAssets;
Run Code Online (Sandbox Code Playgroud)

而Asset类(sloppy)声明如下:

class Asset
{
public:
   Asset(T* a, bool l, std::string f) : asset(a), loaded(l), filename(f)
    {
    }
  Asset(const Asset& copy) 
{
  loaded   = copy.loaded;
  filename = copy.filename;
  asset    = new T();
  *asset   = *copy.asset;
}
  ~Asset()
{
  delete asset;
}
  Asset& operator=(const Asset& other)
{
  Asset temp(other);
  loaded = temp.loaded;
  filename = temp.filename;
  std::swap(asset,temp.asset);
  return *this;
}

  T*          asset;
  bool        loaded;
  std::string filename;
};
Run Code Online (Sandbox Code Playgroud)

Nim*_*Nim 5

您的问题出在您的复制构造函数中:

  asset    = new T();
  *asset   = *copy.asset;
Run Code Online (Sandbox Code Playgroud)

我会留给你解决原因......