Tablice dynamiczne i segmentation fault.
Ostatnio zmodyfikowano 2012-01-31 13:42
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: #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. |
|
ison |
» 2012-01-31 13:35:14 try { * tab1 = new int[ rozmiar ]; }
|
przecież pierwszy wymiar to musi być tablica wskaźników ;) try { tab1 = new int *[ rozmiar ]; }
for( int i = 0; i < rozmiar; i++ ) { delete[] tab1[ i ]; delete[] tab2[ i ]; }
|
oprócz tego musisz jeszcze usunąć delete[] tab1; delete[] tab2;
|
|
imralav Temat założony przez niniejszego użytkownika |
» 2012-01-31 13:42:48 No tak, nie z tej strony gwiazdeczka ; ( Dzięki. |
|
« 1 » |