0xC0000005:访问冲突读取位置0x4effffff

时间:2013-08-15 12:26:31

标签: c++ access-violation

这个问题让我抓狂,我在网上搜索但找不到任何与我的问题相关的答案。 错误是这样的:

  

GraphSimulation.exe中0x7726dfe4处的未处理异常:0xC0000005:   访问冲突读取位置0x4effffff。

我有一个名为GraphSimulation的主项目,它模拟网络。此GraphSimulator生成网络对象。

class CNetwork
{
private:

    //...
    unsigned long                   lastTimeUnitStepCounter;
    NetworkObjectCode               codeGenerationCounter;
    vector <string>                 HBInfo;
    SStatisticsMonitor              statisticMonitor;

    bool                            bManageCashAlone;


private:
    void TrySendingMoviePartsOnPath();
    void InitActionArrayWithNetwork();


public:

    void                            SetHalfBallInfo( string );
    vector<string>                  GetHalfBallInfo();

我有另一个项目,它是网络的算法,以帮助如何分发电影。

我需要在算法运行时设置一些信息。

string s = "some information";

network.SetHalfBallInfo(s);

SetHalfBallInfo将此信息存储在HBInfo中;当算法完成运行时,我需要在GUI中显示它。所以GetHalfBallInfo会调用这些信息。

m_HalfBallInfo = _network.GetHalfBallInfo();

//showing the movie parts list
CListBox* pSolutionDisplayList = (CListBox*)GetDlgItem(IDC_SOLUTION_LIST);

for(int i = 0 ; i < m_HalfBallInfo.size() ; ++ i )
    {   
        CString str;
        str.Format("%u " , m_HalfBallInfo[i]);
        pSolutionDisplayList->AddString(str);
    }

但是当我在开始算法运行之前返回网络时崩溃了。

CNetwork CGraphView::ConvertGraphToNetwork()
{
    CNetwork network;

    //...

    for(int i = 0 ; i < movieCodeArray.GetSize() ;  ++i)
    {
        CMovieWrapper currMovieWrapper;
        pDlgParam->movieList.GetNetworkObject(movieCodeArray[i] , &currMovieWrapper);
        network.AddMovie(currMovieWrapper.GetMovieCopy());
    }

    //...         


    return network;
}

返回网络后崩溃。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

传递网络类作为返回值非常繁重,可能有多种副作用。 你实际做的是在函数的开头定义一个新对象,向它添加一些东西,然后将它复制到函数末尾的中间实例并销毁原始对象。如果你在这个类中动态分配元素,并且不复制正确构造它们(如果你这样做 - 它效率非常低),这可能是毁灭性的。

如果没有看到整个代码就很难判断问题是否存在,但无论如何 - 你应该考虑来回传递指针(或引用,如果你不小心可能会导致其他错误)