这是一个关于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;
}
答案 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;
}