Как сделать динамически распределенную память доступной в глобальном масштабе?
Как сделать динамически выделенную память в качестве глобальной области памяти?
#include <stdio.h>
#include <string.h>
char* call(int);
char *y;
int main() {
char *a;
int x;
x=45;
a=call(x); \\ I guess it must be pointing to the Memory pointed by y
printf(a); \\prints hello world
x=46;
strcpy(a,"good");
a=call(x);
printf(a);
}
char* call(int x) {
y=(char *)malloc(40);
if(x==45) {
strcpy(y,"hello world");
return(y);
} else {
return(y);
}
}
У меня есть несколько вопросов:
Память распределяется
malloc()
оставаться до конца программы или до конца функции, в которой она определена?Как мне сделать
a
а такжеy
указать на один и тот же адрес, выделенный функцией malloc, когда они находятся в разных функциях?Как сделать динамически распределенную память доступной глобально?
2 ответа
Решение
- До конца программы или до звонка
free
по этому указателю a = y;
сделаюa
а такжеy
указать на ту же область памяти. В твоем случае,a = call(x);
делает это тоже.a
указывает на память, выделенную вcall
который все еще действует вmain
,- Вы только что сделали это.
Запомни free(a);
в вашем main
,
- Память, выделенная malloc, доступна до тех пор, пока вы не освободите ее явно, в противном случае до конца программы.
- Вы можете использовать глобальный указатель или передать указатель по пути.
- Такой же как #2