Си: выделение памяти внутри фукции

Пишу на голом Си, система Debian, в качестве IDE используется Code Blocks.

Допустим, в функцию передаётся указатель, в который выделяется память. В упрощённом виде:

void func(int* pointer){
pointer = malloc(sizeof(int));
*pointer = 8;
}

Пока действие происходит внутри функции, всё нормально. Но при выходе из функции выделенная память стирается. Это, конечно хорошо, снижает количество утечек. Но есть ли возможность выделить память в указатель через функцию другим способом, кроме как через оператор return? Ведь, например, этот указатель вообще может быть глобальным, и функция будет работать только с ним, не имея никаких параметров.

UPD: знающие люди уже поправили меня, что память не стирается - исчезает указатель на неё. То есть происходит утечка памяти. Если у меня есть глобальная переменная-указатель, и функция будет работать только с ней, и я не хочу передавать его в качестве аргумента:

int* pointer = NULL;
void pointer_alloc(int blocks){
pointer = malloc(sizeof(int) * blocks);
}

то как мне быть? После выхода из функции указатель теряет связь с выделенной под него памятью.


Ответы (1 шт):

Автор решения: gbg

Передайте в функцию указатель на указатель - и будет вам счастье.

void func(int** pointer)
{
    *pointer = malloc(sizeof(int));
    **pointer = 8;
}

void caller()
{
   int* alpha;
   func(&alpha);
   printf("%d\n", **alpha); // выводит 8
}
→ Ссылка