0

マップを含む構造を作成していますが、要素を挿入しようとすると、セグメンテーション違反が発生します

#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;

 }
4

2 に答える 2

7

あなたのコードはどれも慣用的な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;
}
于 2013-03-03T10:15:42.820 に答える
2

演算子を使用して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;
}
于 2013-03-03T10:20:12.630 に答える