我有一个C ++ DLL A和DLL B. Dll A会调用一个函数,而是在Dll B中启动一个线程。
Dll A将填充DLL B中的函数将交换的向量。向量具有Class LogObj的指针元素。
class LogData
{
public:
FunctionID funcID;
INT fType;
INT padSize;
INT mapToDB;
ULONG eTime;
ULONG sTime;
ULONG pCount;
INT curChild;
LogData* parent;
vector<LogData*>* childList;
LogData()
{
childList = new vector<LogData*>;
childList->clear();
pCount=0;
padSize=0;
curChild=0;
}
~LogData()
{
vector<LogData*>::iterator itr = childList->begin();
for(;itr!=childList->end();itr++)
{
delete *itr;
}
childList->clear();
delete childList;
}
};
指向上述类的指针将位于向量中。向量本身就在堆中。
void ClassInDLLA::GetClassObj(vector<LogData*>* toSwaps)
{
if(GetTogglingSwitch())
{
toSwaps->swap(*swapBucket);
}
else
{
}
return;
};
通过从DLL B调用上述函数,将交换向量。在交换之前,“toSwaps”(参数)将为空。
现在,可以从DLL B读取LogObj指针(在DLL A中创建)及其值。在某些时候,我面临着访问冲突异常的崩溃。为什么会这样?我正在做的是正确还是错误的做法?
崩溃发生在这行代码
中bool si = logObj->childList->empty();
当我尝试访问LogObj中的向量时,会发生崩溃。但是这次崩溃发生在处理之间的某个地方。我只在DLL B中的所有处理之后删除了childList和logObj。