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

Wywołanie funkcji z klasy i crash programu

Ostatnio zmodyfikowano 2013-03-13 14:50
Autor Wiadomość
krissuu
Temat założony przez niniejszego użytkownika
Wywołanie funkcji z klasy i crash programu
» 2013-03-13 11:13:49
Cześć. Mam problem z programem. Wszystko się elegancko kompiluje, ale gdy próbuje wywołać jakąś funkcje z klasy, program się zawiesza... Nie mam zielonego pojęcia dlaczego. Oto mój kod:
C/C++
#include "stdafx.h"

class tablica
{
    int rozmiar_tab;
    int * wsk_tab;
   
public:
   
    //tablica(int rozmiar);
    //~tablica() { liczba_tablic--; };
   
    void pokaz_tab();
    void dodaj_element();
    void usun_element();
    void fun_zer();
    void fun_sort_ros();
    void fun_sort_mal();
   
    static int liczba_tablic;
};

/*
int tablica :: liczba_tablic = 0;
tablica :: tablica (int rozmiar)
{
    rozmiar_tab = rozmiar;
    wsk_tab = new int [rozmiar_tab];
    liczba_tablic++;
}
*/

void tablica::dodaj_element()
{
    int p;
    int liczba;
    int * new_tab1 = new int[ rozmiar_tab + 1 ];
    cout << "Jaka liczba chcesz, aby pojawila sie na koncu tablicy? ";
    cin >> liczba;
    for( p = 0; p < rozmiar_tab; p++ )
    {
        new_tab1 = wsk_tab;
    }
    new_tab1[ p ] = liczba;
    for( int i = 0; i < p + 1; i++ )
    {
        if( i % 5 == 0 ) cout << endl;
       
        cout << "tab[" << i << "]= " << wsk_tab[ i ] << "\t";
    }
    cout << endl << endl;
}

void tablica::usun_element()
{
    int ktory;
    int * new_tab2 = new int[ rozmiar_tab - 1 ];
    cout << "Element tablicy o jakim indeksie chcesz usunac? ";
    cin >> ktory;
    for( int i = 0; i < ktory; i++ )
    {
        new_tab2 = wsk_tab;
        if( i % 5 == 0 ) cout << endl;
       
        cout << "tab[" << i << "]= " << wsk_tab[ i ] << "\t";
    }
    for( int j = ktory + 1; j < rozmiar_tab; j++ )
    {
        new_tab2 = wsk_tab;
        cout << "tab[" << j - 1 << "]= " << wsk_tab[ j ] << "\t";
        if( j % 5 == 0 ) cout << endl;
       
    }
    delete[] wsk_tab;
    wsk_tab = new_tab2;
    cout << endl;
}

void tablica::pokaz_tab()
{
    int rozmiar_tab;
    int * wsk_tab;
    cout << "Zawartosc tablicy po wpisaniu elementow: " << endl;
    for( int i = 0; i < rozmiar_tab; i++ )
    {
        if( i % 5 == 0 ) cout << endl;
       
        cout << "tab[" << i << "]= " << wsk_tab[ i ] << "\t";
    }
    cout << "\n\nLiczba elementow w tablicy wynosi: " << rozmiar_tab << endl << endl;
}

void tablica::fun_zer()
{
    for( int i = 0; i < rozmiar_tab; i++ )
    {
        wsk_tab[ i ] = 0;
    }
    cout << "Zawartosc tablicy po wyzerowaniu elementow: " << endl;
    for( int i = 0; i < rozmiar_tab; i++ )
    {
        if( i % 5 == 0 ) cout << endl;
       
        cout << "tab[" << i << "]= " << wsk_tab[ i ] << "\t";
    }
}
void tablica::fun_sort_ros()
{
    for( int i = 0; i < rozmiar_tab - 1; i++ )
    {
        for( int j = 0; j < rozmiar_tab - 1; j++ )
        {
            if( wsk_tab[ j + 1 ] < wsk_tab[ j ] )
                 swap( wsk_tab[ j + 1 ], wsk_tab[ j ] );
           
        }
    }
    cout << "Zawartosc tablicy po sortowaniu rosnacym elementow: " << endl;
    for( int i = 0; i < rozmiar_tab; i++ )
    {
        if( i % 5 == 0 ) cout << endl;
       
        cout << "tab[" << i << "]= " << wsk_tab[ i ] << "\t";
    }
}

void tablica::fun_sort_mal()
{
    for( int i = 0; i < rozmiar_tab - 1; i++ )
    {
        for( int j = 0; j < rozmiar_tab - 1; j++ )
        {
            if( wsk_tab[ j + 1 ] > wsk_tab[ j ] )
                 swap( wsk_tab[ j + 1 ], wsk_tab[ j ] );
           
        }
    }
    cout << "Zawartosc tablicy po sortowaniu malejacym elementow: " << endl;
    for( int i = 0; i < rozmiar_tab; i++ )
    {
        if( i % 5 == 0 ) cout << endl;
       
        cout << "tab[" << i << "]= " << wsk_tab[ i ] << "\t";
    }
}

int _tmain( int argc, _TCHAR * argv[] )
{
    int rozmiar_tab;
    int * wsk_tab;
    int wybor_opcji;
    tablica * obiekt_tab;
    unsigned wyjscie = 0;
   
    do {
        cout << "Jakiego rozmiaru tablice chcesz utworzyc? ";
        cin >> rozmiar_tab;
        cout << endl;
        wsk_tab = new int[ rozmiar_tab ];
        for( int i = 0; i < rozmiar_tab; i++ )
        {
            cout << "Podaj element tablicy o " << i << " indeksie: ";
            cin >> wsk_tab[ i ];
        }
       
        cout << "\n 1 - Pokaz tablice." << endl;
        cout << " 2 - Dodaj element do tablicy." << endl;
        cout << " 3 - Usun element z tablicy." << endl;
        cout << " 4 - Wyzeruj elementy tablicy." << endl;
        cout << " 5 - Posortuj tablice malejaco." << endl;
        cout << " 6 - Posortuj tablice rosnaco." << endl;
        cout << " 7 - Zakoncz dzialanie programu. " << endl;
        cout << "Ktory nr wybierasz? ";
        cin >> wybor_opcji;
       
        switch( wybor_opcji )
        {
        case 1:
            {
                obiekt_tab->pokaz_tab();
            }
        case 2:
            {
                obiekt_tab->dodaj_element();
            }
        case 3:
            {
                obiekt_tab->usun_element();
            }
           
        case 4:
            {
                obiekt_tab->fun_zer();
            }
        case 5:
            {
                obiekt_tab->fun_sort_mal();
            }
        case 6:
            {
                obiekt_tab->fun_sort_ros();
            }
        case 7:
            {
                wyjscie = 1; break;
            }
           
        }
    } while( !wyjscie );
   
    system( "PAUSE" );
    return 0;
}
 Będę wdzięczny za pomoc.
P-78190
pekfos
» 2013-03-13 13:33:04
P-78203
krissuu
Temat założony przez niniejszego użytkownika
» 2013-03-13 13:42:22
Podobny ponieważ trochę się na nim wzorowałem, ale nadal nie mogę dojść dlaczego mi nie działa. Dodam, że wszystkie funkcje są sprawdzone i działają. Więc robię coś źle z klasami... Dopiero zaczynam przygodę z programowaniem obiektowym więc nie wiem wszystkiego.
P-78205
pekfos
» 2013-03-13 13:44:43
obiekt_tab
 to pusty wskaźnik.
P-78206
krissuu
Temat założony przez niniejszego użytkownika
» 2013-03-13 13:49:08
Tak, próbowałem zrobić z niego wskaźnik na tablice, tak jak jest w podanym przez Ciebie temacie, lecz nie do końca mi to wychodziło i program się nie kompilował.
P-78207
pekfos
» 2013-03-13 13:51:05
obiekt_tab
 to pusty wskaźnik.. Nie możesz wywołać metody, na rzecz nieistniejącego obiektu.
P-78208
krissuu
Temat założony przez niniejszego użytkownika
» 2013-03-13 14:04:43
Yhm czyli powinienem zrobić tak jak jest w tamtym temacie. Utworzyć taka jakby bazę (tablice wskaźników na obiekty) która będzie przechowywała te moje tablice tak? Heh łatwiej powiedzieć, trudniej zrobić no ale będę próbował.
P-78212
pekfos
» 2013-03-13 14:16:11
Nie, powinieneś utworzyć obiekt.
C/C++
Klasa * wsk;
wsk->sth(); //error
C/C++
Klasa * wsk = new Klasa;
wsk->sth(); //działa
P-78213
« 1 » 2
  Strona 1 z 2 Następna strona