悬空内存/未分配内存问题

时间:2013-12-09 08:45:07

标签: c++ pointers memory memory-management

我有这段代码,由定时器更新机制调用。

但是,我注意到,应用程序的内存大小在运行时会持续增加4,表示可能存在恶意指针或其他问题。

void RtdbConnection::getItemList()
{

std::vector<CString> tagList = mItemList->getItems();
//CString str(_T("STD-DOL1"));
PwItemList* pil = mPwSrv->GetItemList();
CPwItem pw ;

for(auto it = tagList.begin(); it != tagList.end(); ++it)
{

    pw = mPwSrv->GetItem(*it);
    pil->AddItem(&(PwItem)pw);

}

pil->AddInfo(DB_DESC);  //Description
pil->AddInfo(DB_QALRM); // Alarm Status
pil->AddInfo(DB_QUNAK); //UNACK status
pil->AddInfo(DB_AL_PRI); // Priority of the alarm tag

pil->ExecuteQuery();


int i = 0;

for (auto it = tagList.begin();  i < pil->GetInfoRetrievedCount() && it != tagList.end(); i+=4, it++) 
{       
    //item = {0};
    CString str(*it);
    PwInfo info = pil->GetInfo(i);
    CString p(info.szValue().c_str());
    bool isAlarm = pil->GetInfo(i+1).bValue();
    bool isAck = pil->GetInfo(i+2).bValue();
    int priority  = pil->GetInfo(i+3).iValue();

    item = ItemInfo(str, p, isAlarm, isAck, priority);
    //int r = sizeof(item);
    mItemList->setInfo(str, item);   // Set the details for the item of the List


}

delete pil;
pil = NULL;


}

我似乎无法在这里找到需要取消分配的内存块。当我进入以下功能时,也没有任何内存分配:

mItemList->setInfo(str, item);

定义为:

    void ItemList::setInfo(CString tagname, ItemInfo info)
{
    int flag = 0;
    COLORREF tempColour;
    std::map<CString, ItemInfo>::iterator tempIterator;
    if ( (tempIterator = mAlarmListMap.find(tagname)) !=mAlarmListMap.end() )
    {
        //remove the current iteminfo and insert new one
        if(mAlarmListMap[tagname].getPriority() != info.getPriority() && (mAlarmListMap[tagname].getPriority()!=0))
        {
            mAlarmListMap[tagname].updatePriority(info.getPriority());
            mAlarmListMap[tagname].mPrioChanged = TRUE;
        }
        else
        {
            mAlarmListMap[tagname].mPrioChanged = FALSE;
            ((mAlarmListMap[tagname].getPrevPriority() != 0)?(mAlarmListMap[tagname].ResetPrevPriority()):TRUE);
            mAlarmListMap[tagname].setPriority(info.getPriority());
        }


        mAlarmListMap[tagname].setDescription(info.getDescription());
        mAlarmListMap[tagname].setAlarm(info.getAlarmStat());
        mAlarmListMap[tagname].setAlarmAck(info.getAckStat());
        tempColour = mColourLogic->setUpdatedColour(mAlarmListMap[tagname].getAlarmStat(), mAlarmListMap[tagname].getAckStat(), flag);
        mAlarmListMap[tagname].setColour(tempColour);

        if(!(info.getAlarmStat() || info.getAckStat()))
        {

                flag = 1;
                mAlarmListMap[tagname].mIsRTN = true;
                mAlarmListMap[tagname].setDisplayCondition(false);

        }
        else
        {
            mAlarmListMap[tagname].setDisplayCondition(true);
        }

                //((mAlarmListMap[tagname].mIsRTN == true)?

    }
    else
       { 
           tempIterator =  mAlarmListMap.begin();
           tempColour = mColourLogic->fillColourFirst(info.getAlarmStat(), info.getAckStat());
           info.setColour(tempColour);
           mAlarmListMap.insert(tempIterator, std::pair<CString,ItemInfo>(tagname,info));

    }



}

我尝试了分配,但增加总是一个常数4.

有人可以看一下并突出问题所在吗? 非常感谢。

0 个答案:

没有答案