如何将动态分配的内存作为全局可访问的?

时间:2011-07-19 06:13:54

标签: c malloc dynamic-memory-allocation

如何将动态分配的内存作为全局内存位置?

#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. 如何使ay指向malloc函数在不同函数中分配的相同地址?

  3. 如何使动态分配的内存全局可访问?

2 个答案:

答案 0 :(得分:3)

  1. malloc分配的内存在您明确释放之前可用,否则直到程序结束。
  2. 您可以使用全局指针或沿途传递指针。
  3. 与#2相同

答案 1 :(得分:2)

  1. 直到程序结束,或直到您在该指针上调用free
  2. a = y;会使ay指向相同的内存位置。在您的情况下,a = call(x);也会这样做。 a指向您在call中分配的内存,该内存在main中仍然有效。
  3. 你刚刚完成了。
  4. 请记住free(a);中的main