在DLL之间交换向量

时间:2017-06-17 11:44:27

标签: c++ pointers vector dll

我有一个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。

0 个答案:

没有答案