Ugrás a tartalomhoz

wild pointer

A Wikiszótárból, a nyitott szótárból


Főnév

wild pointer (tsz. wild pointers)

  1. (informatika) A wild pointer (vadmutató) C++-ban olyan mutató, amely nem mutat érvényes memóriaterületre. Ez általában akkor fordul elő, ha egy mutatót deklarálunk, de nem inicializáljuk, vagy ha egy dinamikusan foglalt memóriát felszabadítunk, de továbbra is a mutatóval próbálunk rá hivatkozni.

Példák vadmutatókra:

1. Nem inicializált mutató

Ha egy mutatót létrehozunk, de nem adjuk meg neki, hogy hová mutasson, akkor az véletlenszerű memóriacímre mutathat.

#include <iostream>

int main() {
    int* ptr; // Vadmutató, mert nem inicializált
    std::cout << *ptr; // Nem biztonságos, ismeretlen memóriát olvas!
    return 0;
}

Ez undefined behavior-t (meghatározatlan viselkedést) okoz, mert a ptr mutató nem mutat érvényes helyre.

2. Törölt mutató használata

Ha egy dinamikusan foglalt memóriaterületet felszabadítunk, de továbbra is próbáljuk használni a mutatót, akkor az is vadmutatóvá válik.

#include <iostream>

int main() {
    int* ptr = new int(10);
    delete ptr; // Felszabadítjuk a memóriát
    std::cout << *ptr; // Undefined behavior! Vadmutató használata
    return 0;
}

Hogyan lehet elkerülni a vadmutatókat?

  1. Inicializáljuk a mutatókat nullára:

    int* ptr = nullptr;
    
  2. Használjunk nullptr-t a felszabadítás után:

    delete ptr;
    ptr = nullptr;
    
  3. Használjunk okosmutatókat (std::unique_ptr, std::shared_ptr), hogy a memória automatikusan felszabaduljon:

    #include <memory>
    
    int main() {
        std::unique_ptr<int> ptr = std::make_unique<int>(10);
        return 0; // Memória automatikusan felszabadul
    }
    
  4. Kerüljük a nyers mutatók használatát, ha lehetséges.

Vadmutatók használata komoly programozási hibákhoz vezethet, például memóriakorrupcióhoz és programösszeomláshoz.