Вы изменяете локальную копию своей переменной a
, она не будет распространяться за пределы функции (т. Е. Область вызова). Самое простое решение вашей проблемы - передать a
по ссылке, но вы также можете передать его, используя указатель и разыменовав указатель внутри вашей функции.
См. Приведенные ниже примеры.
Использование ссылки
void func (X*& a) {
X* array = (X*) malloc (5*sizeof(X));
a = array;
}
...
X* a;
func (a);
Амперсанд в строке ниже указывает, что a передается по ссылке, т.е. изменение его внутри функции приведет к распространению изменения на параметр вызывающего абонента.
void func (X*& a) {
Использование указатель-указатель
Это может быть трудно понять, если вы неопытны, когда дело доходит до указателей, но мы заставим func
принять указатель-указатель в качестве параметра и передать адрес переменной a
от основного.
После разыменования указатель на указатель мы можем безопасно хранить требуемую информацию.
void func (X** pointer_to_a) {
X* array = (X*) malloc (5*sizeof(X));
*pointer_to_a = array;
}
...
X * a;
func (&a); // pass in address of a
Примечание
Поскольку вы пишете C ++ (указывается в заголовке вопроса и теге), вам не следует использовать std::malloc
, вместо этого обратитесь к operator new
.