Dynamiczna alokacja dwuwymiarowej tablicy char w C

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:

 
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:

 
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;
}


3

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

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

No i nie zwalniasz pamięci....

2

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

0

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

0

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

2
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;
}
0

dzieki

1 użytkowników online, w tym zalogowanych: 0, gości: 1