我有一个很基本的问题,需要帮助我试图理解动态分配内存(堆上)的作用域是什么。
#include <stdio.h>
#include <malloc.h>
//-----Struct def-------
struct node {
int x;
int y;
};
//------GLOBAL DATA------
//-----FUNC DEFINITION----
void funct(){
t->x = 5; //**can I access 't' allocated on heap in main over here ?**
t->y = 6; //**can I access 't' allocated on heap in main over here ?**
printf ("int x = %d\n", t->x);
printf ("int y = %d\n", t->y);
return;
}
//-----MAIN FUNCTION------
int main(void){
struct node * t = NULL;// and what difference will it make if I define
//it outside main() instead- as a global pointer variable
t = (struct node *) malloc (sizeof(struct node));
t->x = 7;
t->y = 12;
printf ("int x = %d\n", t->x);
printf ("int y = %d\n", t->y);
funct(); // FUNCTION CALLED**
return 0;
}
在这里,我可以访问
t
中的结构funct()
吗,即使内存是在main()
中分配的,而不传递参数(指向t
到function funct
的指针),因为堆是线程的公共对象如果我将struct node * t = NULL
之外的main()
定义为全局变量,会有什么不同?它有什么问题吗? 最佳答案
当您使用malloc()时,它返回的内存可以访问代码中的任何位置,前提是您可以看到包含malloc()返回的指针的变量。
所以在您的代码中,如果t是全局的,那么它在main和funct()中都是可见的,是的,您可以在两者中都使用它。
事实上,正如前面提到的,funct()不知道t是什么,因为t的声明和定义在main中;t在funct中超出了范围如果funct知道t是什么,那么你分配到t上的内存将在funct中可用。
关于c - 线程中的所有函数都可以访问动态分配的内存(堆),即使不传递指针还是它在函数本地?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/692636/