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