かわりmalloc
のnew
を使用する必要があります。
確か
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
は初期化されていないため、使用時に未定義の動作が発生します。
あなたの代わりにmalloc
/free
のC++ =>new
/delete
を使用して、私は残って削除させていただきますそのあなたのstruct
にデストラクタを追加するために良いことができると思い際にC-ようなコードを記述しないでください。ブーストスマートポインタからstd::unique_ptr
、std::shared_ptr
、またはC++の古いバージョンのために、同等クラス:あなたがC++ 11以上、スマートポインタを見てみましょうを使用する場合は、メモリを回避するためにmymap
内のポインタは、最後に
を漏らす
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>();
多分最初の行は 'struct try'の代わりに 'struct point'と言うべきでしょうか? – matiu
また、それはC++であり、cではありません。 mallocの代わりにC++メモリ管理を使うほうがいいです。おそらくあなたはマップが必要です。指針は全くありませんか? –
matiu
'struct try'は私のためにエラーを生成します。あなたのコンパイラとコンパイルフラグは何ですか? – Garf365