Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Sta ovde ne valja?

[es] :: C/C++ programiranje :: C/C++ za početnike :: Sta ovde ne valja?

[ Pregleda: 1442 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

StefanJer91
Stefan Jeremic
Beograd

Član broj: 121923
Poruke: 160
*.static.ikomline.net.



Profil

icon Sta ovde ne valja?26.07.2008. u 11:53 - pre 191 meseci
Citajuci knjigu "Kako ne treba programirati na jeziku C++" naisao sam na zanimljiv primer koji sam odlucio da testiram (ako neko ima knjigu: Problem 82), pre svega zato sto sam u nekim ranijim primerima saznao neke nove stvari koje sam mislio da mogu da se uporebe za ovaj primer, za koji su oni dali neko drugo resenje. Dakle u pitanju je prosta klasa array. Evo mog programa, tj. modifikovana verzija njihovog mada nema mnogo razlike, sem sto sam ja stavio da konstruktor za kopiranje ne moze da se koristi i oni su koristili na jednom mestu memset, za sta se ispostavilo da ne moze da radi. Dakle, meni se ovaj program izrvsi normalno, ali na kraju ispise gomilu errora (slicno kao kada se za neki pointer 2 puta poziva delete, a new je pozvan 1). Problem je izgleda u f-ji store_it jer kada je ne pozivam pomenutih gresaka nema. To bi mi bilo logicno jedino ako bi se unutar f-je pozvao destruktor medjutim to se ne desava s obzirom da se f-ji prosledjuje referenca, a i njnim pozivanjem 2 puta program nastavi da radi. Zna li neko u cemu je problem? Program sam testirao samo na linuxu, tako da je moguce da na drugim platformama i sistemima program radi sobzirom da meni sve izgleda ok.

Code:

#include <stdio.h>

class var_array
{
    private:
        int *data;
        const int size;
        var_array(const var_array &other); //Konstruktor za kopiranje se ne moze koristiti
    public:
        var_array(const int _size):
            size(_size)
        {
            data = new int(size);
        }
        ~var_array()
        {
            delete []data;
        }

        int &operator[](const unsigned index)
        {
            return (data[index]);
        }
};

void store_it(var_array &test_array)
{
    test_array[1] = 1;
    test_array[3] = 3;
    printf("Odradio copy\n");
}

int main()
{
    var_array test_array(30);
    
    store_it(test_array);
    store_it(test_array);
    for (int i = 0; i < 30; ++i)
    {
        printf("%d\n",test_array[i]);
    }
    printf("gotovo\n");
    return 0;
}



The earth teaches us more about ourselves than all the books. Because it resists us. Man discovers himself when he measures himself against the obstacle.
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.dynamic.sbb.rs.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: Sta ovde ne valja?26.07.2008. u 12:07 - pre 191 meseci
Nisam gledao kod detaljno, ali proveri za pocetak ovaj deo koda:
data = new int(size);

Pretpostavljam da si hteo ovo:
data = new int[size];

 
Odgovor na temu

StefanJer91
Stefan Jeremic
Beograd

Član broj: 121923
Poruke: 160
*.static.ikomline.net.



Profil

icon Re: Sta ovde ne valja?26.07.2008. u 12:14 - pre 191 meseci
Hah, 'ladno nisam primetio da je u tome je bio problem, hvala.
The earth teaches us more about ourselves than all the books. Because it resists us. Man discovers himself when he measures himself against the obstacle.
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: Sta ovde ne valja?

[ Pregleda: 1442 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.