c++中结构体指针变量的问题,给结构体指针变量赋值时,有时会取不到有效地址。 5

structVarAddr{……};structCommVariable{……VarAddr*varAddr;}classCClient{……vector<CommVar... struct VarAddr
{
……
};
struct CommVariable
{
……
VarAddr* varAddr;
}
class CClient
{
……
vector<CommVariable> m_vVarList;
}
void CClient::ClientTask(void)
{
for( int i=0; i<m_vVarList.size(); i++ )
{
VarAddr *pAddr = m_vVarList.at(i).varAddr;
……
}
}
VarAddr *pAddr = m_vVarList.at(i).varAddr;这句pAddr 有时赋值不成功,显示为无法计算的表达式。
请大家帮忙看看是什么问题?
我的程序是采用的多线程的,我查过好像vector在多线程中会出现问题,但不知道该怎么该?
展开
 我来答
猫猫一号脑
2013-01-07 · TA获得超过2739个赞
知道大有可为答主
回答量:1268
采纳率:50%
帮助的人:525万
展开全部
那个for循环保证下标不会越界的,除非是多线程的。
”有时赋值不成功,显示为无法计算的表达式“是编译错误还是结果错了?具体什么现象?

确保vector里每个CommVariable的varAddr都初始化了,如果没初始化是个野指针,最有可能的是这个问题。
追问
现象是在进入for循环,循环多次后VarAddr *pAddr 变量变成野指针,但m_vVarList中的varAddr的值是正常的,只是在给pAddr赋值时失败。
追答
果然是多线程。以下操作线程的代码是windowsAPI
用信号量,在对vector进行读和写操作的时候用信号量锁上
WaitForSingleObject(hMutex, INFINITE);
eventQueue.push_back(e);
ReleaseMutex(hMutex);
如果你的情况比较复杂那么要小心安排信号量的使用。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友61311ba
2013-01-07 · TA获得超过882个赞
知道小有建树答主
回答量:1386
采纳率:0%
帮助的人:897万
展开全部
试试 换成迭代器遍历 还有问题没.
追问
m_vVarList.at(i).varAddr中值是正确的的,at(i)也没有越界,我怀疑
是结构体指针变量的多次赋值导致的冲突问题。
追答
STL不会有问题, 再仔细检查下边界...
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式