Как сделать динамически распределенную память доступной в глобальном масштабе?

Как сделать динамически выделенную память в качестве глобальной области памяти?

#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);
    }
}

У меня есть несколько вопросов:

  1. Память распределяется malloc() оставаться до конца программы или до конца функции, в которой она определена?

  2. Как мне сделать a а также y указать на один и тот же адрес, выделенный функцией malloc, когда они находятся в разных функциях?

  3. Как сделать динамически распределенную память доступной глобально?

2 ответа

Решение
  1. До конца программы или до звонка free по этому указателю
  2. a = y; сделаю a а также y указать на ту же область памяти. В твоем случае, a = call(x); делает это тоже. a указывает на память, выделенную в call который все еще действует в main,
  3. Вы только что сделали это.

Запомни free(a); в вашем main,

  1. Память, выделенная malloc, доступна до тех пор, пока вы не освободите ее явно, в противном случае до конца программы.
  2. Вы можете использовать глобальный указатель или передать указатель по пути.
  3. Такой же как #2
Другие вопросы по тегам