Dynamiczna alokacja dwuwymiarowej tablicy char w C

Dynamiczna alokacja dwuwymiarowej tablicy char w C
W1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 31
0

Czesc, szukam odpowiedzi na pytanie dlaczego nie dziala druga wersja alokacji tablicy? Skoro przekazuje wzkaznik na tablice do fcji to w funckji powinno udac sie zaalokowac tam pamiec.

Pierwsza wersja:

Kopiuj
 
char ** allocation(int _i)
{
	int _n;
	char ** _tab = (char**) malloc(_i*sizeof(char*));
	for (_n=0; _n<_i; _n++)
	{
		_tab[_n] = (char*) malloc(10*sizeof(char));
	}
	return _tab;
}

int main(){

	int i=0;
	int n=0;
	char **tab = NULL;

	puts("Ile wyrazow chcesz wczytac?");
	scanf("%d", &i);

	tab = allocation(i);
        return 0;
}

Druga wersja:

Kopiuj
 
void allocation(char ** _tab, int _i)
{
	int _n;
	_tab = (char**) malloc(_i*sizeof(char*));
	for (_n=0; _n<_i; _n++)
	{
		_tab[_n] = (char*) malloc(10*sizeof(char));
	}
}

int main(){

	int i=0;
	int n=0;
	char **tab = NULL;

	puts("Ile wyrazow chcesz wczytac?");
	scanf("%d", &i);

	allocation(tab, i);
        return 0;
}


kaczus
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Łódź
  • Postów: 1403
3

druga wersja jest błedna w 2 przypadku powinno być:

Kopiuj
 void allocation(char *** _tab, int _i)

No i nie zwalniasz pamięci....

twonek
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2500
2

Bo operujesz na kopii zmiennej: Przekazywanie parametru przez wartość i referencję (pomiń fragmenty o referencji, ale reszta ma zastosowanie do C).

Azarien
  • Rejestracja: dni
  • Ostatnio: dni
0

Po co ci te podkreślenia we wszystkich zmiennych? Tylko gorzej się czyta przez to.

W1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 31
0

moze ktos napisac jak ma to wygladac z tymi trzema *** ?

twonek
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2500
2
Kopiuj
void allocate(char*** tab, int size)
{
    *tab = (char**) malloc(size * sizeof(char*));
    for (int i = 0; i < size; ++i)
    {
        (*tab)[i] = (char*) malloc(10 * sizeof(char));
    }
}
 
int main()
{
    char **tab = 0;
 
    int size;
    puts("Ile wyrazow chcesz wczytac?");
    scanf("%d", &size);
 
    allocate(&tab, size);
    return 0;
}
W1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 31
0

dzieki

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.