alokowanie za pomoca operatora new a tablica wskaznikow do char

0
class zestaw
{
    public:
        void dodaj(const char *);
        void wypisz(unsigned int ilosc);
        void zeruj()
        {
            numer = 0;
        }
    private:
        char *pytania[];
        unsigned int numer;
};

void zestaw::dodaj(const char *tresc)
{
    pytania[numer] = new char[80];
    strcpy(pytania[numer], tresc);
    numer++;
}

to fragment programu, kompiluje sie ale po chwili sie crashuje. Problem jest podczas alokowania pytania

[numer] = new char[80];

Co jest zle?

dodanie znacznika <code class="cpp"> - fp

1

Najpierw musisz zaalokować samą tablicę, dopiero potem elementy...

zestaw::zestaw()
{
    pytania = new char*[123];
}
0

Korzystanie z char* w C++ to masochizm, wiec jesli przelozony nie stoi nad Toba z biczem, to odradzam. Rowniez korzystanie ze strcpy(), to nie jest najlepszy pomysl. Dodatkowo polecalbym rozwazyc sens metody zeruj() (swoja droga, smiesznie nazwana).

0
char *pytania[];

To jest zeroelementowa tablica a ty sobie po niej indeksujesz jak gdyby nigdy nic ;]

0

Ok, w takim razie mam tablice pytania ktora zawiera 123 wskazniki do charow. Nastepnie musze zalokowac miejsce najepirw dla samej tablicy 123 elementowej, w ktorejkazdy element to wskaznik do char.
Tutaj mam problem bo wydaje mi sie, ze to co bylo napisane wczesniej chyba przez azarena jest poprawne znaczy pytania = new char*[123]; Jednak pojawia sie blad:
incompatible types in assignment of 'char**' to 'char* [123]'
W jaki sposob zalokowac te tablice ?

#ifndef ZESTAW_PYTAN_H
#define ZESTAW_PYTAN_H
class zestaw
{
    public:
        void dodaj(const char *);
        void wypisz(unsigned int ilosc);
        void zeruj()
        {
            numer = 0;
        }
        void alokuj()
        {
            pytania = new char*[123];
        }
    private:
        char *pytania[123];
        unsigned int numer;
};
#endif // ZESTAW_PYTAN_H 

Pewnie mozna to napisac prosciej, ale lece sobie symfonia c++ i temat o std:string jest za chwile wiec na razie lece tym co umiem

2

Teraz to jest tablica 123 wskaznikow na char* alokowana na stosie, wiec nie trzeba jej inicjalizowac przed uzyciem.

0

Dzieki, udalo sie obie opcje zrobic ;)

Ostatnie pytanie
co do metody zeruj();
Jeżeli zmienna numer jest automatyczna (stos) to jej wartosc jest przypadkowa, wobec tego jak ladnie ja wyzerowac jezeli nie metoda zeruj ?

0

W konstruktorze.

1 użytkowników online, w tym zalogowanych: 0, gości: 1