Си: выделение памяти внутри фукции
Пишу на голом Си, система 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 шт):
Передайте в функцию указатель на указатель - и будет вам счастье.
void func(int** pointer)
{
*pointer = malloc(sizeof(int));
**pointer = 8;
}
void caller()
{
int* alpha;
func(&alpha);
printf("%d\n", **alpha); // выводит 8
}