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

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

#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 ]

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

Не забудьте free(a); вваш main.

...