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

Tablice dynamiczne i segmentation fault.

Ostatnio zmodyfikowano 2012-01-31 13:42
Autor Wiadomość
imralav
Temat założony przez niniejszego użytkownika
Tablice dynamiczne i segmentation fault.
» 2012-01-31 13:13:56
Witam

Przechodząc do sedna sprawy:
C/C++
#include <iostream>
#include <cstdio>
#include <ctime>
#include <cstdlib>
#include <iomanip>

using namespace std;

int main()
{
    srand( time( NULL ) );
    int ** tab1, rozmiar, ile = 0;
    int ** tab2;
    cout << "Podaj rozmiar dwoch kwadratowych tablic:\n";
    cin >> rozmiar;
    try
    {
        * tab1 = new int[ rozmiar ];
    }
    catch( bad_alloc )
    {
        cout << "Brak pamieci na utworzenie tablicy.\n";
        return 1;
    }
    try
    {
        * tab2 = new int[ rozmiar ];
    }
    catch( bad_alloc )
    {
        cout << "Brak pamieci na utworzenie tablicy.\n";
        return 1;
    }
    for( int i = 0; i < rozmiar; i++ )
    {
        try
        {
            tab1[ i ] = new int[ rozmiar ];
        }
        catch( bad_alloc )
        {
            cout << "Brak pamieci na utworzenie tablicy.\n";
            return 1;
        }
        try
        {
            tab2[ i ] = new int[ rozmiar ];
        }
        catch( bad_alloc )
        {
            cout << "Brak pamieci na utworzenie tablicy.\n";
            return 1;
        }
    }
   
    for( int i = 0; i < rozmiar; i++ )
    {
        for( int j = 0; j < rozmiar; j++ )
        {
            tab1[ i ][ j ] = rand() % 9 + 1;
            tab2[ i ][ j ] = rand() % 9 + 1;
            if( tab1[ i ][ j ] == tab2[ i ][ j ] )
            {
                ile++;
            }
        }
    }
   
    cout << "Tablica pierwsza:\n";
    for( int i = 0; i < rozmiar; i++ )
    {
        cout << endl;
        for( int j = 0; j < rozmiar; j++ )
        {
            cout << setw( 3 ) << tab1[ i ][ j ];
        }
    }
    cout << "\nTablica druga:\n";
    for( int i = 0; i < rozmiar; i++ )
    {
        cout << endl;
        for( int j = 0; j < rozmiar; j++ )
        {
            cout << setw( 3 ) << tab2[ i ][ j ];
        }
    }
   
    cout << "\nElementow takich samych na tej samej pozycji jest: " << ile << endl;
   
    for( int i = 0; i < rozmiar; i++ )
    {
        delete[] tab1[ i ];
        delete[] tab2[ i ];
    }
   
    cin.ignore();
    getchar();
    return 0;
}

Przy podanym rozmiarze tablicy większym od 3 dostaję segmentation fault w linijce 47 :
tab2[ i ] = new int[ rozmiar ];
 i nie mam zielonego pojęcia dlaczego tak się dzieje. Brak pamięci?

Pozdrawiam,
imralav.
P-49879
ison
» 2012-01-31 13:35:14
C/C++
try
{
    * tab1 = new int[ rozmiar ];
}
przecież pierwszy wymiar to musi być tablica wskaźników ;)
C/C++
try
{
    tab1 = new int *[ rozmiar ];
}

C/C++
for( int i = 0; i < rozmiar; i++ )
{
    delete[] tab1[ i ];
    delete[] tab2[ i ];
}
oprócz tego musisz jeszcze usunąć
C/C++
delete[] tab1;
delete[] tab2;
P-49880
imralav
Temat założony przez niniejszego użytkownika
» 2012-01-31 13:42:48
No tak, nie z tej strony gwiazdeczka ; (
Dzięki.
P-49881
« 1 »
  Strona 1 z 1