문제

// A Mutex allows threads mutually exclusive access to a resource.
//-----------------------------------------------------------------------

class Mutex
{
private:
    CRITICAL_SECTION m_mutex;

public:
     Mutex() { InitializeCriticalSection(&m_mutex); }
    ~Mutex() { DeleteCriticalSection(&m_mutex);     }

    void acquire() { EnterCriticalSection(&m_mutex); }
    void release() { LeaveCriticalSection(&m_mutex); }
};

Entrek CodesNitch 소프트웨어를 사용하여 메모리 누출 등을 디버깅하고 테스트하면 다음 오류 가보고됩니다.

InitializeCriticalSection Error: lpCriticalSection (0x000387d4) points to an invalid 
  memory location (0x00018984) Mutex::Mutex in lockmutex.h, line 29

어쩌면 내 잠들지 않는 밤이 마침내 나에게 도달하고있을 것입니다. 그러나 나는 그것이 정확히 무엇에 대해 불평하는지 이해하지 못한다. 어떤 아이디어?

도움이 되었습니까?

해결책

:: memset (& m_mutex, 0, sizeof (m_mutex)); 그것을 시작하기 전에.

다른 팁

CodesNitch 기대합니다 초기화되지 않은 포인터를 포함하는 구조를 연구하고 있습니다.

Codesnitch의 관점에서 생각해보십시오. 당신이하고있는 일과 이것의 차이점은 무엇입니까?

struct Customer {
    char * name;
};

extern void greetCustomer(Customer* c);

class CheckoutLine {
  private:
    Customer m_customer;
  public CheckoutLine() {
    greetCustomer(&m_customer);
  }
};

이것은 더 많은 양고기처럼 보입니다 인간 눈, 우리는 GreetCustomer가 아마도 m_customer에 의존 할 것이라고 추론하기 때문에 분명히 그렇지 않습니다. 그러나 의미 적으로, 이것은 코드와 정확히 동일합니다.

아마도 Entrek에 버그를 제출하는 것이 좋습니다. InitializeCriticalSection ()은 "구조를 함수로 전달하기 전에 초기화되어야한다"규칙에 대한 합리적인 예외입니다.

나는 당신의 수업에 아무런 문제가 없습니다 정의. 그래도 어디에 사용되고 있습니까? 특정 인스턴스를 여전히 잘못 사용할 수 있습니다.

Critical_section의 Win32 정의에는 'struct _rtl_critical_section *'에 대한 포인터가 포함됩니다. OS ~할 수 있었다 도구를 혼동하는 방식 으로이 구조물을 처리하는 데 영리해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top