使用: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;
}