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

[C] malloc, dwuwymiarowa dynamiczna tablica char

Ostatnio zmodyfikowano 2016-03-17 15:02
Autor Wiadomość
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:

C/C++
#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?
P-146119
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.
P-146121
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
P-146123
carlosmay
» 2016-03-17 10:56:18
Wyciek pamięci?
Brakuje funkcji free() zwalniającej "pożyczoną" pamięć.
Zwalniasz po kolei wiersze drugiego wymiaru i na koniec pierwszy wymiar.
P-146124
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.
P-146126
Harion
Temat założony przez niniejszego użytkownika
» 2016-03-17 11:19:34
Tak jest okej?

C/C++
#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 );
}
 
P-146127
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.
P-146129
Harion
Temat założony przez niniejszego użytkownika
» 2016-03-17 15:02:36
Okej dziękuję za pomoc.
P-146131
« 1 »
  Strona 1 z 1