Új hozzászólás Aktív témák

  • jattila48

    aktív tag

    válasz mgoogyi #4142 üzenetére

    "Pont nem érdekel, nem látom a gyakorlati jelentőségét"

    Pl. az lehet a gyakorlati jelentősége, hogy innen már világos, hogy a C/C++ -ban miért nem lehet dinamikus méretű tömböt deklarálni (bár mint most megtudtam, újabb C szabvány szerint lehet):

    int n=10;
    int a[n]; //hiba. tomb meret csak konstans lehet

    Ezt kezdők általában nem szokták érteni.
    Ha az új C szabvány ezt mégis megengedi, akkor a tömb címe szükségképpen eltárolódik a memóriában (mintha változó lenne), de a fordító nem engedi meg a megváltoztatását és a címének képzését (gondolom így van, de nem ismerem a C-nek ezt a lehetőségét).
    Másik gyakorlatban fontos vonatkozása a dolognak, hogy a dinamikusan allokált memóriát fel kell szabadítanod (ha nem akarsz memory leaket), a tömböt pedig nem kell (sőt nem szabad!) felszabadítani (hiszen nem a heapen lett lefoglalva). Tekintsük a következő kódrészletet:

    int tomb[10];
    int *dinamik_tomb=new int[10];
    int *pointer;
    pointer=tomb;
    delete[] pointer; //hiba! nem szabad felszabaditani a tomb-ot
    pointer=dinamik_tomb;
    delete[] pointer; //OK, fel kell szabaditani a dinamik_tombot

    Amint látod, a pointer felszabadításánál észnél kell lenni, tudni kell, hogy tömb, vagy dinamikusan allokált memória terület címét tartalmazza-e. Ebből bizony sok hiba adódik (jó párat láttam már), és megy a fejvakarás, hogy miért száll el a program, hiszen a "tomb valójában pointer". Hát nem!

Új hozzászólás Aktív témák