使用: VC++ 2013
concurrency::concurrent_vector<datanode*> dtnodelst
ときどきdtnodelst->at(i)
....無効なアドレス(0XCDCD .. ofc)を取得していますが、これはプッシュバックした後に原因ではないはずです。アイテムを削除したり削除したりしません(削除しても削除された古いアドレスを返しました...しかし、私は削除していないので、そうではありません)
dtnodelst itm = new dtnodelst ();
....
dtnodelst->push_back(itm);
何が起こっているのかについてのアイデアはありますか?
ps Windows スレッド プールを使用しています。時々.. 800万回の挿入と検索を実行でき、すべてがうまくいきます..しかし、時には200回の挿入と検索でさえ失敗します。私はちょっと迷っています。どんな助けでも大歓迎です!!
よろしくお願いします
参考までに実際のコード
ps何か足りないのですか、それとも適切なフォーマットでコードを過去にするのは面倒ですか? 以前はオートアラインだったのを覚えています... -_-
struct datanode {
volatile int nodeval;
T val;
};
concurrency::concurrent_vector<datanode*> lst
inline T find(UINT32 key)
{
for (int i = 0; i < lst->size(); i++)
{
datanode* nd = lst->at(i);
//nd is invalid sometimes
if (nd)
if (nd->nodeval == key)
{
return (nd->val);
}
}
return NULL;
}
inline T insert_nonunique(UINT32 key, T val){
datanode* itm = new datanode();
itm->val = val;
itm->nodeval = key;
lst->push_back(itm);
_updated(lst);
return val;
}