两种情况下指针的内存分配是否相同?

时间:2012-12-17 13:01:28

标签: c

两种情况下指针的内存分配是否相同

struct_datatype * p=NULL;

struct_datatype * p=malloc;

除了堆栈和堆的内存分配??

2 个答案:

答案 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。