[C] malloc, dwuwymiarowa dynamiczna tablica char
Ostatnio zmodyfikowano 2016-03-17 15:02
Harion Temat założony przez niniejszego użytkownika |
[C] malloc, dwuwymiarowa dynamiczna tablica char » 2016-03-17 10:24:37 Witam, potrzebuję zrobić dwuwymiarową dynamiczną tablice char, która będzie przechowywać w sobie różne słowa do określonej długości. Muszę dynamicznie alokować pamięć używając funkcji malloc. Oto co do tej pory mam: #include <stdio.h> #include <stdlib.h> #include <malloc.h>
void main( void ) { int i; int wiersze = 10; int kolumny = 100; char ** tab = malloc( wiersze * sizeof( char ) ); for( i = 0; i < wiersze; i++ ) tab[ i ] = malloc( kolumny * sizeof( char ) ); tab[ 0 ][ 0 ] = "a"; printf( "%s", tab[ 0 ][ 0 ] ); } W konsoli wyświetla mi się null... co robię źle? |
|
michal11 |
» 2016-03-17 10:44:34 1. Najpierw alokujesz pamięć na każdy wiersz, czyli nie na char a na char* char ** tab = malloc( wiersze * sizeof( char * ) ); . 2. tab[ 0 ][ 0 ] = "a"; przypisujesz do char c-string, zamień na tab[ 0 ][ 0 ] = 'a'; . 3. Masz wyciek pamięci, nie zwalniasz tab na koniec programu. |
|
Harion Temat założony przez niniejszego użytkownika |
» 2016-03-17 10:47:25 Wyciek pamięci? Mógłbyś wyjaśnić czego brakuje bo niezbyt rozumiem :/ I chyba coś z printf mam nie tak bo gdy chcę wyświetlić %s to program nie wywala błędu ale konsola się zwiesza... a gdy wyświetlam %d to dla przypisania 'a' pokazuje się 97 |
|
carlosmay |
» 2016-03-17 10:56:18 Brakuje funkcji free() zwalniającej "pożyczoną" pamięć. Zwalniasz po kolei wiersze drugiego wymiaru i na koniec pierwszy wymiar. |
|
michal11 |
» 2016-03-17 11:16:26 A zapomniałem jeszcze o printf, powinno być %c zamiast %s, s jest do wyświetlania c-stringow, napisów, c do pojedynczych znaków. |
|
Harion Temat założony przez niniejszego użytkownika |
» 2016-03-17 11:19:34 Tak jest okej? #include <stdio.h> #include <stdlib.h>
void main( void ) { int i; int wiersze = 100; int kolumny = 100; char ** tab = malloc( wiersze * sizeof( char * ) ); for( i = 0; i < wiersze; i++ ) { tab[ i ] = malloc( kolumny * sizeof( char ) ); } tab[ 99 ][ 99 ] = 'A'; printf( "%c", tab[ 99 ][ 99 ] ); for( i = 0; i < wiersze; i++ ) { free( tab[ i ] ); } free( tab ); } |
|
michal11 |
» 2016-03-17 12:01:11 Wygląda ok, tylko nie jestem pewny co do main, czy nie powinien zwracać inta, ale chyba w C może zwracać void, musisz to sprawdzić dokładnie. |
|
Harion Temat założony przez niniejszego użytkownika |
» 2016-03-17 15:02:36 Okej dziękuję za pomoc. |
|
« 1 » |