マップを含む構造を作成していますが、要素を挿入しようとすると、セグメンテーション違反が発生します
#include<stdio.h>
#include<stdlib.h>
#include<map>
using namespace std;
typedef struct a
{
map<int,int> m;
}a;
int main()
{
a* b;
b=(a*) malloc(sizeof(a));
b->m[0]=0;
}
あなたのコードはどれも慣用的なC++に似始めていません。誰もがあなたに勧めることができる最善のことは、C++についての良い本を手に入れることです。
プログラムの簡単な修正: -new
の代わりに使用するmalloc
-malloc
はC++コードに属していません。a->m
それはそれが実際に構築されていることを確認します。その後、必ずb
最後に削除してください。これにはのすべての問題が伴うnew/delete
ため、C ++の基本についてもう少し知っている場合は、スマートポインターを読んでください。
少し大幅な変更を行うと、単純なプログラムでの問題が少なくなります。自動ストレージを使用する:
a b;
b.m[0] = 0;
これは、奇妙なC / C ++ミックスではなく、C++でのプログラムになります。
#include<map>
struct a
{
std::map<int,int> m;
};
int main()
{
a b;
b.m[0]=0;
}
演算子を使用してnew
メモリを動的に割り当てます。そうしないと、 を使用するときに構造体内のマップのコンストラクターが呼び出されませんmalloc
。
int main()
{
a* b;
b= new a;
b->m[0]=0;
// Do whatever here
// When you're done using the variable b
// free up the memory you had previously allocated
// by invoking delete
delete b;
return 0;
}