Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Tablice dynamiczne char.

Ostatnio zmodyfikowano 2014-12-08 16:52
Autor Wiadomość
GabeN
Temat założony przez niniejszego użytkownika
[C++] Tablice dynamiczne char.
» 2014-12-08 15:17:26
Witam. Utworzyłem, używając funkcji malloc tablicę dwuwymiarową char oraz wprowadzanie do niej danych z ich wypisywaniem w nast. sposób:

C/C++
int main()
{
    //*(tab + i) to to samo, co tab[i]
    int w; //Liczba tablic
    cin >> w;
    char ** tablica =( char ** ) malloc( w * sizeof( char ) ); //Tablica wskaznikow wskazujacych na tablice charow
    int * rozmiary =( int * ) malloc( w * sizeof( int ) ); //Tablica przechowujaca rozmiary poszczegolnych tablic
    int wielkosc;
    for( int i = 0; i < w; i++ )
    {
        cin >> wielkosc; //wielkosc pojedynczej tablicy char
        *( tablica + i ) =( char * ) malloc( wielkosc * sizeof( char ) ); //tworzenie tablic charow
        *( rozmiary + i ) = wielkosc;
        for( int j = 0; j < wielkosc; j++ )
        {
            int ile; //ile razy znak char powinien sie znalezc w tablicy
            char znak; //wprowadzany znak
            cin >> ile >> znak;
            for( int k = 0; k < ile; k++ )
            {
                *( *( tablica + i ) + j ) = znak;
                j++;
            }
            j--;
        }
    }
    for( int i = 0; i < w; i++ )
    {
        for( int j = 0; j < *( rozmiary + i ); j++ )
        {
            cout << *( *( tablica + i ) + j );
        }
        cout << endl;
    }
    return 0;
}
Kod ten działa dla w <= 4, natomiast gdy w jest równe 5, lub większe to program (w zależności od kompilatora) albo się zapętla, albo w pierwszym wierszu wypisuje śmieciowe wartości , nie mam pojęcia dlaczego.
Dodam jeszcze, że nie mogę używać nawiasów kwadratowych: [, ] (oraz równoważnych im sekwencji <:, :>), operatora new oraz klasy string i pojemników z biblioteki standardowej. Zabronione jest także wykorzystanie plików nagłówkowych innych niż cstdlib i iostream.
Szukałem pomocy w internecie na ten temat, ale niczego nie znalazłem. W programie nie mogę znaleźć błędu, a gdy go odpalam w debugerze code::blocks działa tak jak powinien, bez żadnych błędów.


P-122539
Monika90
» 2014-12-08 15:38:31
C/C++
char ** tablica =( char ** ) malloc( w * sizeof( char ) ); //Tablica

powinno być w * sizeof( char* )
P-122540
GabeN
Temat założony przez niniejszego użytkownika
» 2014-12-08 16:52:55
Dziękuję bardzo za pomoc Monika90. Skoro deklaruję tablicę wskaźników to musi być to wskaźnik char*. Teraz program działa dobrze :)

Temat zamknięty.
P-122544
« 1 »
  Strona 1 z 1