这个问题让我抓狂,我在网上搜索但找不到任何与我的问题相关的答案。 错误是这样的:
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;
}
返回网络后崩溃。任何帮助将不胜感激。
答案 0 :(得分:0)
传递网络类作为返回值非常繁重,可能有多种副作用。 你实际做的是在函数的开头定义一个新对象,向它添加一些东西,然后将它复制到函数末尾的中间实例并销毁原始对象。如果你在这个类中动态分配元素,并且不复制正确构造它们(如果你这样做 - 它效率非常低),这可能是毁灭性的。
如果没有看到整个代码就很难判断问题是否存在,但无论如何 - 你应该考虑来回传递指针(或引用,如果你不小心可能会导致其他错误)