-1

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

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;
}

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

4

1 回答 1

0

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

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

于 2013-08-15T12:54:07.370 回答