[ANSI C] Zwracanie wskaźnika

void createBuff(int *buff, char type, int size){

	switch(type){	

		case 0:

			buff = malloc(size * sizeof(int));

			break;

		case 1:

			buff = malloc(size * sizeof(float));

			break;

		default:

			buff = malloc(size * sizeof(char));

			break;

	}


	if(buff==NULL){

		printf("Blad alokacji");

		exit(0);

	}



	buff[0] = size;

	buff[1] = 2;

	return;

}


int main(){

	int *list;

	createBuff(list,0,10);

	printf("%d",list[0]);

	return 0;

Chciałbym aby Printf wyświetlał liczbę 10, natomiast list = 2, list-1 = -6 co już kompletnie nie wiem skąd się bierze.

Przypisując w ciele funkcji do argumentu buff, przypisujesz do lokalnej kopii, po wyjściu z funkcji nie masz już tego wskaźnika i masz wyciek pamięci. Wartość zmiennej list w main się nie zmienia i czytasz śmieci, nieokreślony obszar pamięci.

void createBuff(int **buff, char type, int size){

	switch(type){	

		case 0:

			*buff = malloc(size * sizeof(int));

			break;

		case 1:

			*buff = malloc(size * sizeof(float));

			break;

		default:

			*buff = malloc(size * sizeof(char));

			break;

	}


	if(*buff==NULL){

		printf("Blad alokacji");

		exit(0);

	}



	*buff[0] = size;

	*buff[1] = 2;

	return;

}


int main(){

	int *list;

	createBuff(&list,0,10);

	printf("%d",list[0]);

	return 0;

Teraz powinno działać.