两种情况下指针的内存分配是否相同
struct_datatype * p=NULL;
struct_datatype * p=malloc;
除了堆栈和堆的内存分配??
答案 0 :(得分:1)
在第一种情况下,指针被初始化为指向地址0,因此如果访问指针指向的数据,则会得到0指针异常,因为指针不指向可访问的内存位置。 BR />
在第二种情况下,p =(struct_datatype *)malloc(sizeof(struct_datatype));内存被分配并分配给指针,因此您可以通过p访问该内存,例如:如果x是结构中的int字段,则可以将此x设置为p->x=123
答案 1 :(得分:0)
问题并不清楚你在问什么。
struct_datatype * p=NULL;
没有为p
分配内存。它指向没有分配的内存。
struct_datatype * p=malloc();
可能已分配了一些内存,并且已分配的内存地址已分配给p
。如果malloc失败,则会将NULL分配给p
。
注意:对于这两种情况,sizeof p
的大小为struct_datatype*
。
注意:在编译时的两种情况下,指针变量p
都将在堆栈中分配内存,其大小为struct_datatype*
。存储在指针p
中的地址可能指向用户地址空间中可访问的任何有效存储器地址。在NULL
情况下,没有分配地址(并且NULL不是用户可访问的地址),但是当您执行malloc
(如果成功)时,分配的内存地址将分配给指针{{1}从 heap 空间再次将其分配给NULL。