Pytanie nowicjusza: lista stringów w funkcji

0

Witam

Ciągle ucieka mi pewna kwestia związana ze wskaźnikami. Sprawa zapewne prosta, ale byłbym wdzięczny za wyjaśnienie co i jak.
Przyjmijmy, że mamy funkcję zwracającą listę stringów (nie mogę jej zmienić):

char**  foo(int *count);

Funkcja ta przyjmuje jako argument wskaźnik do inta, w którym umieszczona zostanie liczba stringów w tablicy.
Taki kod działa bez zarzutu:

int  main(void) {
	char		**array;
	int		count, i;

	array = foo(&count);
	for ( i = 0; i < count; i++ ) {
		fprintf(stdout, "- %s\n", array[i]);
	};

	return 0;
};

Teraz, wywoływanie funkcji foo() chcę przenieść do oddzielnej funkcji, która coś tam będzie rzeźbić i ma zwrócić rzeczoną tablicę przez argument. Jak jednakże zdefiniować taką funkcję? Funkcja ma zwracać int.
To się kompiluje, ale dostaje SEGFAULT między oczy:

int  bar(char **array, int *count) {
	array = foo(count);
	return 56;    // liczba dobra, jak każda inna
};

// ...

int  main(void) {
	char		**array;
	int		result, count;

	result = bar(array, &count);
};

O ile pojmuję dobrze, po wyjściu z funkcji bar() to, na co wskazuje array już nie istnieje, stąd SEGFAULT (dobrze mi się wydaje?).
Jak zatem to ugryźć?

P.S. Nie, to nie jest zadanie na zaliczenie ;)

0

musisz zapewnic to zeby twoj wskaznik na tablicę zmienil sie, a nie tylko jego kopia lokalna:

int  bar(char ***array, int *count) {
        *array = foo(count);
        return 56;    // liczba dobra, jak każda inna
};

i wywolanie:

result = bar(&array, &count);
0
krwq napisał(a)

musisz zapewnic to zeby twoj wskaznik na tablicę zmienil sie, a nie tylko jego kopia lokalna:

int  bar(char ***array, int *count)

Rozumiem. Dotychczas konstrukcja "***" była dla mnie czymś dziwnym i niespotykanym.
Teraz działa. Dziękuję za pomoc.

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