Frage

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

Mit der Entrek Codesnitch Software zu debuggen und Test für alle Speicherlecks usw., meldet es die folgenden Fehler:

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

Vielleicht ist alle meine schlaflosen Nächte sind schließlich immer zu mir. Aber ich verstehe nicht, was es genau ist beschweren. Irgendwelche Ideen?

War es hilfreich?

Lösung

ich wette, Sie fälschen kann aus der Schnatz mit :: memset (& m_mutex, 0, sizeof (m_mutex)); vor dem Aufruf es init.

Andere Tipps

CodeSnitch ist offenbar nicht klug genug, um zu wissen, dass InitializeCriticalSection () erwartet auf einer Struktur zu arbeiten, einen nicht initialisierten Zeiger enthält.

Denken Sie daran, aus CodeSnitch Sicht. Was ist der Unterschied zwischen dem, was Sie tun, und diese:

struct Customer {
    char * name;
};

extern void greetCustomer(Customer* c);

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

Das sieht viel mehr faul zum Mensch Auge, weil wir daraus schließen, dass greetCustomer wahrscheinlich verlassen wird auf m_customer initialisiert wird, die es offensichtlich nicht. Aber semantisch, dies genau das gleiche wie Sie Ihren Code.

Es ist wahrscheinlich lohnt sich ein Fehler mit Entrek Einreichung; InitializeCriticalSection () ist eine angemessene Ausnahme von den „Strukturen initialisiert werden soll sich auf eine Funktion, bevor er“ -Regel.

Ich sehe nichts falsch mit Ihrer Klasse Definition . Wo wird es aber verwendet? Eine bestimmte Instanz noch nicht einwandfrei verwendet werden könnte.

Die Win32-Definition eines CRITICAL_SECTION enthält einen Zeiger auf eine ‚Struktur _RTL_CRITICAL_SECTION *‘. Das O könnte in einer Weise im Umgang mit dieser Struktur ist klug sein, die das Werkzeug verwirren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top