5 Wege Pointer Probleme in C ++ zu vermeiden

In C ++ ein Zeiger ist eine Variable, die die Adresse eines Objekts in dem Computer des internen Speicher enthält. Verwenden Sie diese Schritte, um Probleme mit Zeigern in C ++ zu vermeiden:

  1. Initialisieren Zeiger, wenn erklärt.

    Nie Zeigervariablen nicht initialisierte verlassen - Dinge wäre nicht so schlimm, wenn nicht initialisierten Zeiger immer Zufallswerte enthalten sind - die überwiegende Mehrheit der Zufallswerte sind illegal Zeigerwerte und führt dazu, dass das Programm zum Absturz zu bringen, sobald sie verwendet werden. Das Problem ist, dass nicht initialisierte Variablen sind in der Regel auf den Wert der anderen, zuvor verwendeten Zeigervariablen zu übernehmen. Diese Probleme sind sehr schwer zu debuggen.

    Wenn Sie nicht wissen, was sonst ein Zeiger zu initialisieren, zu initialisieren, es zu nullptr. nullptr garantiert eine illegale Adresse.

  2. Null aus Zeiger, nachdem Sie sie verwenden.

    In ähnlicher Weise Null immer eine Zeigervariable, wenn der Zeiger nicht mehr gültig ist, indem sie den Wert zuweisen nullptr. Dies ist insbesondere dann der Fall, wenn Sie einen Speicherblock auf dem Heap zurückgeben immer Null über den Zeiger Lösch- nach Heap-Speicher zurück.

  3. Reservieren Sie Speicher aus dem Heap und wieder in den Haufen auf dem gleichen "Ebene" Speicherlecks zu vermeiden.

    Immer versuchen, einen Speicherblock auf dem Heap auf dem gleichen Niveau der Abstraktion zurück, wie Sie es zugeordnet. Dies bedeutet im Allgemeinen versucht, den Speicher auf dem gleichen Niveau von Funktionsaufrufen zu löschen.

  4. Fangen Sie eine Ausnahme Speicher zu löschen, wenn nötig.

    Vergessen Sie nicht, dass eine Ausnahme zu fast jeder Zeit auftreten können. Wenn Sie beabsichtigen, die Ausnahme zu fangen und Betriebs weiterhin (wie zu lassen, das Programm abstürzen Gegensatz), stellen Sie sicher, dass Sie die Ausnahme abfangen und kehren alle Speicherblöcke auf dem Heap, bevor die Zeiger, die ihnen außerhalb des Gültigkeitsbereichs und der Speicher gehen Punkt ist, hat verloren.

  5. Stellen Sie sicher, dass die Typen genau übereinstimmen.

    Achten Sie immer darauf, dass die Typen von Zeigern den gewünschten Typ entsprechen. Verwenden Sie keine Zeiger, ohne einem bestimmten Grund neu gefasst. Folgendes berücksichtigen:

Leere fn (int * p) - Leere myFunc () {char c = 'a'-char * pC = c-fn ((int *) pC) -}

Die obige Funktion ohne Beanstandung kompiliert, da der Zeichenzeiger pC hat zu einem int * Neufassung wurde die Deklaration von fn (int *) passen - allerdings wird dieses Programm fast sicher nicht funktionieren. Die Funktion fn () erwartet einen Zeiger auf eine volle 32-Bit-Integer und nicht einige rinky-dink 8-Bit-Zeichen. Diese Art von Problemen sind sehr schwer zu klären.

Menü