
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在多线程中会出现问题,但不知道该怎么该? 展开
{
……
};
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在多线程中会出现问题,但不知道该怎么该? 展开
2个回答
展开全部
那个for循环保证下标不会越界的,除非是多线程的。
”有时赋值不成功,显示为无法计算的表达式“是编译错误还是结果错了?具体什么现象?
确保vector里每个CommVariable的varAddr都初始化了,如果没初始化是个野指针,最有可能的是这个问题。
”有时赋值不成功,显示为无法计算的表达式“是编译错误还是结果错了?具体什么现象?
确保vector里每个CommVariable的varAddr都初始化了,如果没初始化是个野指针,最有可能的是这个问题。
追问
现象是在进入for循环,循环多次后VarAddr *pAddr 变量变成野指针,但m_vVarList中的varAddr的值是正常的,只是在给pAddr赋值时失败。
追答
果然是多线程。以下操作线程的代码是windowsAPI
用信号量,在对vector进行读和写操作的时候用信号量锁上
WaitForSingleObject(hMutex, INFINITE);
eventQueue.push_back(e);
ReleaseMutex(hMutex);
如果你的情况比较复杂那么要小心安排信号量的使用。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
试试 换成迭代器遍历 还有问题没.
追问
m_vVarList.at(i).varAddr中值是正确的的,at(i)也没有越界,我怀疑
是结构体指针变量的多次赋值导致的冲突问题。
追答
STL不会有问题, 再仔细检查下边界...
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询