【发布时间】:2014-02-16 06:35:43
【问题描述】:
使用:VC++ 2013
concurrency::concurrent_vector<datanode*> dtnodelst
偶尔当我做dtnodelst->at(i) .... 我得到一个无效的地址 (0XCDCD.. ofc)
这不应该是这种情况,因为在我推回之后,我从不删除或删除任何项目(即使我删除它也应该返回已删除的旧地址......但我从来没有删除,所以这甚至不是案例)
dtnodelst itm = new dtnodelst ();
....
dtnodelst->push_back(itm);
对可能发生的事情有什么想法吗?
附言我正在使用 Windows 线程池。有时..我可以进行 800 万次插入和查找,一切顺利....但有时即使 200 次插入和查找也会失败。我有点迷路了。任何帮助将不胜感激!
感谢和问候
实际代码仅供参考
附言我是否遗漏了某些东西,或者过去的代码格式是否正确?我记得它之前是自动对齐的... -_-
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;
}
【问题讨论】:
标签: c++ multithreading visual-c++ concurrency concurrent-vector