[C] Dynamiczna tablica trójkątna
Ostatnio zmodyfikowano 2016-01-22 12:13
mimotego Temat założony przez niniejszego użytkownika |
[C] Dynamiczna tablica trójkątna » 2016-01-21 17:56:55 Witam, mam napisać funkcję, która przyjmie liczbę jako parametr, następnie dynamicznie zaalokuje dwuwymiarową trójkątną tablicę, wypełni ją i zwróci jej adres. Oto co stworzyłem: #include<stdio.h> #include<stdlib.h>
int ** tablicaTrojkatna( int n ) { int i, j, k = 1; int ** tablica = malloc( sizeof( int * ) * n ); for( i = 0; i < n; i++ ) { tablica[ i ] = malloc( sizeof( int ) *( i + 1 ) ); } for( i = 0; i < n; i++ ) { for( j = 0; j < k; j++ ) { tablica[ i ][ j ] = 0; k++; } } return tablica; }
int main() { int i, j, k = 1; int ** t = tablicaTrojkatna( 5 ); for( i = 0; i < 5; i++ ) { for( j = 0; j < k; j++ ) { printf( "%d", t[ i ][ j ] ); k++; } } for( i = 0; i < n; i++ ) free( tablica[ i ] ); free( tablica ); return 0; }
Program oczywiście nie działa, a kompilator wyrzuca naruszenie ochrony pamięci. |
|
mateczek |
» 2016-01-21 19:27:16 1. "tablica" w funkcji main nie zadeklarowana (nie wiadomo co to jest) 2. zmienna n również nie istnie 3. w c++ to się nawet nie kompiluje!!! 4. for( j = 0; j < k; j++ ) { tablica[ i ][ j ] = 0; k++; }
jeśli już to chyba tak miało być. Oczywiście wcześniej musisz nadać odpowiednią wartość zmiennej n !!! for( i = 0; i < n; i++ ) { for( j = 0; j < i + 1; j++ ) { tablica[ i ][ j ] = 0; } } zobacz debuger !!! https://www.youtube.com/watch?v=L9JvSHYLvuw |
|
mimotego Temat założony przez niniejszego użytkownika |
» 2016-01-21 19:55:30 No tak z tymi zmiennymi "n" i "tablica" to moje niedopatrzenie. Poprawienie warunku w drugiej pętli załatwiło sprawę. Chciałbym jeszcze zapytać czy takie zwolnienie pamięci jest prawidłowe? int main() { int i, j; int ** t = tablicaTrojkatna( 5 ); for( i = 0; i < 5; i++ ) { for( j = 0; j < i + 1; j++ ) { printf( "%d", t[ i ][ j ] ); } printf( "\n" ); } for( i = 0; i < 5; i++ ) free( t[ i ] ); free( t ); return 0;
|
|
darko202 |
» 2016-01-22 12:13:02 1. zasada jest dobra
2. zasada forum "jeden problem" -> "jeden temat" dlatego nowy problem -> nowy temat[/code] |
|
« 1 » |