2010-04-26 3 views
0

그래서이 클라이언트/서버 프로그램을 코딩하고 있습니다. 이 코드는 클라이언트 측의 코드입니다. 클라이언트는 단지 3 개 인수를 취하는 생성자가 mpqs_sieve 객체포인터 개체의 구성원에 대한 액세스 위반

mpqs_sieve *instance_; 

포인터이기 때문에 나는 그것을 만들 이유의 인스턴스를 가지고, 나는 시간에 나중에 그것을 인스턴스화합니다.

클라이언트는 먼저 서버에서 일부 데이터를 가져 와서이 인스턴스를 인스턴스화하는 데 사용합니다. 이 후, 더 많은 데이터를 요청할 것이고, 이것을 받으면 (이것들은 2 차 다항식에 대한 3 개의 계수이다), 이것들을 instance_ 객체에 설정해야한다. 그러나 instance_ 멤버 함수를 호출하면 해당 함수 호출 내 instance_ 멤버 중 하나에서 액세스 위반이 발생합니다.

나는 여기에 내 코드를 게시 : on pastebin, 나는 라인 통화가 라인 (71)에서 유래 (100)에 오류가 발생하고, 여기에 그 라인 (21) 전 발췌 한 것입니다 :

class client_protocol { 
public: 
    static std::string parse_message(
     network_message& msg, mpqs_sieve *instance_) 
    { 
     // ... 
     return set_mpqs_data(m.substr(i+1), instance_); 
    } 

private: 
    static std::string set_mpqs_data(
     std::string data, mpqs_sieve *instance_) 
    { 
     instance_ = new mpqs_sieve(n, M, FB_count); 
     // ... 
    } 
}; 

어떤 아이디어가이 문제를 해결하기 위해 ?

+2

여기에 관련 코드를 게시해야합니다. –

답변

3

변수에 대한 참조가 아닌 instance_ 포인터의 복사본을 함수에 전달하고 있습니다. instance_에 할당하면 같은 이름의 멤버 변수가 아니라 로컬 변수가 수정됩니다.

함수 매개 변수를 mpqs_sieve *&instance_으로 변경하십시오.

+0

감사합니다. 유용했습니다. –

0

기존의 대답에 변수에 대한 참조에 대한 메모가 좋은 지점입니다, 나는 하나의 다른 잠재적 인 문제를 참조하십시오

내가 제대로 코드를 이해한다면, 객체가 줄에 set_mpqs_data() 함수에서 생성됩니다 48. 그 시간 전에 set_mpqs_data() 함수가 호출되는지 확신합니까? (MPQS_DATA 메시지가 처리되고 있습니까?) 그렇지 않으면 instance_는 set_polynomial_data()를 호출 할 때 실제 객체를 가리킬 수 없습니다.

+0

안녕하세요. 예, 나는 이것을 고려했습니다 =) –