2013-08-15 7 views
-1

이 문제는 미쳐 버렸습니다. 웹에서 검색했지만 내 문제와 관련된 답변을 찾을 수 없습니다. GraphSimulation.exe에서 0x7726dfe4에서0xC0000005 : 액세스 위반 읽기 위치가 0x4effffff

처리되지 않은 예외 : 오류는 이것이다가 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

내가 생각하기에 당신이 우리에게 정확한 코드를 보여줘야한다고 생각합니다. –

+4

디버거에서 runnig가 지치셨습니까? 액세스해서는 안되는 메모리에 액세스하고 있지만 이유 또는 위치를 정확하게 말하기는 어렵습니다. –

+0

정확히 어떤 라인에서 충돌이 발생합니까? 그리고 그 라인에 사용 된 변수는 어떻게 설정되어 있습니까? –

답변

0

반환 값으로 네트워크 클래스를 전달하면 꽤 무겁고 여러 가지 부작용이있을 수 있습니다. 실제로하는 일은 함수의 시작 부분에 새로운 객체를 정의하고, 그 객체에 물건을 추가 한 다음, 함수의 끝에있는 중간 인스턴스로 복사하고 원래의 것을 파괴하는 것입니다. 이 클래스에 동적으로 요소를 할당하고 적절히 복사하지 않으면 매우 위험 할 수 있습니다. 그렇게 할 경우 매우 비효율적입니다.

전체 코드를 보지 않고도 문제는 아닌지 알기는 어렵지만 포인터를 앞뒤로 전달하는 것을 고려해야합니다 (주의하지 않으면 다른 오류가 발생할 수 있음)

관련 문제