2011-06-24 14 views
1

std :: mapオブジェクトに値を挿入するアクセス違反が発生する次のコードを考慮してください。理由は分かりません。あなたがそれを見るようなコードは、私が最初に同じ結果のアクセス違反で std :: mapへのポインタの問題

std::map<int, MSGTYPE> 

を試してみました、しかし

std::map<int, int> 

使用しています。 (私は列挙型がINTであることを知っています)。これらの構造の

// a common include file has this 
// common.h 

enum MSGTYPE 
{ 
    MSG_R1, 
    MSG_A1, 
    MSG_L1, 
    MSG_S1, 
    MSG_S2 
}; 

typedef std::map<int, int> SYSMsgMap; 

typedef struct _MYOBJ 
{ 
    int x1; 
    int x2; 
    SYSMsgMap XFerMap; 
}MYOBJ; 

私の使用がそうのようになります。

MYOBJ *cMYOBJ::AddNetwork(cvnet *net) 
{ 
MYOBJ *ob; 

    ob = new MYOBJ(); 

    // initialization code removed for this post/brevity 

    BuildMsgMap(ob->XFerMap); 

    // rest removed for this post/brevity 
} 

void cMYOBJ::BuildMsgMap(std::map<int, int> &mm) 
{ 

    mm.clear(); 

    switch(NETTYPE) 
    { 
    case 1: 
     mm[ 1] = MSG_R1; <-- Access violation here! 
     mm[ 2] = MSG_A1; 
     mm[ 4] = MSG_L1; 
     mm[16] = MSG_S1; 
     mm[32] = MSG_S2; 
    break; 

// rest removed... 
} 
+0

あなたは何を意味するのか分かりません。 – Eric

+5

@Amendので、時間を無駄にしないでください。 – Eric

+6

私はその失敗の理由は見ません。私はいくつかのコメントアウトされたコードがこのオブジェクトを破壊するかもしれないと思う。 - Armenのコメントを明確にするために:このC++ではplain-Cスタイルの大きな影響を見ることができます。特に、C++では 'struct MYOBJ {...};'(typedefと末尾の名前なし)をまったく同じ効果で宣言することができます。あなたはCでそれをすることができませんでした。 – CygnusX1

答えて

2

obが誤っob = new MYOBJ;BuildMsgMap()の呼び出しの前memset(ob, sizeof(MYOBJ), 0)どこかでクリアされませんか?

+0

おかげでこれを言います。あなたは実際に正しいです!私がこれを投稿する前に、私は実際にmemsetを新しいコメントの後すぐにコメントアウトしました。新しいMYOBJを新しいMYOBJに変更しました。 – Eric

0

私はmmはミリメートル[0]への参照であるためだと思う(コードは、多くの場合、Cで使用されているレガシーとmemsetトリック以来であるため)、そしてそれはあなたが持っているすべてのメモリ割り当てであります mm [1]の場合、挿入する必要があります。

か、これが

+0

マップのインデックス演算子はT&、ペアではないです。また、コンパイラはそれを選択します。 –

+0

ええ..修正されました –

0

が、私はこのmyobjが定義されたコンストラクタを持っていないので、SYSMsgMapのコンストラクタが呼び出さ取得されていないので、あなたがアクセス違反を取得していると考えることができます

ob = new MYOBJ[33];//since you have indexed mm[32] in the next function 

希望をやってみたいです。空の引数のないコンストラクタをMYOBJに追加し、それが変更されているかどうかを確認します。

typedef struct _MYOBJ 
{ 
    _MYOBJ() {} 
    int x1; 
    int x2; 
    SYSMsgMap XFerMap; 
}MYOBJ; 
関連する問題