使用malloc后,为什么指针在此函数之外无法访问?

时间:2014-06-16 02:24:20

标签: c scope malloc

这是一个关于malloc和范围的相当简单的问题。根据我对malloc的理解,它允许您为变量等动态分配内存。难道这不意味着变量在内存释放之前仍然可以访问吗?我写了几行代码,但是当我尝试编译时遇到了这个错误。

错误讯息: " malloc.c:16:37:错误:使用未声明的标识符' a'"

#include <stdio.h>
#include <stdlib.h>

int* createnum(int n)
{
    int* a = malloc(sizeof(int));
    *a = n;
    printf("%p\n", a);
    printf("%d\n", *a);
    return a;
}

int main(void)
{
    createnum(1);
    printf("The variable is %d\n", a);

    return 0;
}

2 个答案:

答案 0 :(得分:1)

你说,

  

这不应该意味着在释放内存之前变量仍然可以访问吗?

这是不正确的。如果从函数返回内存,则可以访问内存,但不是变量。该变量只能在createnum

中访问

你想要这样的东西:

int* a = createnum(1);

当然,你必须改变

printf("The variable is %d\n", a);

printf("The variable is %d\n", *a);

因为a的类型是int*,而不是int

答案 1 :(得分:1)

像这样的东西!

  #include <stdio.h>
    #include <stdlib.h>

    int* createnum(int n)
    {
        int* a = malloc(sizeof(int));
        *a = n;
        printf("%p\n", a);
        printf("%d\n", *a);
        return a;
    }

    int main(void)
    {
        int *p = createnum(1);
        printf("The variable is %d\n", *p);
        free(p);
        return 0;
    }