-1

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

struct_datatype * p=NULL;

struct_datatype * p=malloc;

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

4

2 回答 2

1

在第一种情况下,指针被初始化为指向地址 0,因此,如果您访问指针指向的数据,则会出现 0 指针异常,因为指针未指向可访问的内存位置。

第二种情况,p=(struct_datatype *)malloc(sizeof(struct_datatype)); 内存已分配并分配给指针,因此您可以通过 p 访问该内存,例如,如果 x 是结构中的 int 字段,则可以通过以下方式设置 xp->x=123

于 2012-12-17T13:08:35.070 回答
0

这个问题不清楚你在问什么。

struct_datatype * p=NULL; 没有分配内存p。它指向没有分配的内存。

struct_datatype * p=malloc(); 可能已经分配了一些内存,并且分配的内存的地址已分配给p. 如果 malloc 失败,NULL 将被分配给p.

注意:对于这两种情况,sizeof 都是psizeof struct_datatype*

注意:指针变量p将在编译时分配给中的内存,在这两种情况下都是 sizeof struct_datatype*。存储在指针中的地址p可能指向用户地址空间中可访问的任何有效内存地址。在NULL没有分配地址的情况下(并且 NULL 不是用户可访问的地址),但是当您这样做时malloc(如果成功),分配的内存地址将被分配给p空间中的指针,否则它将再次被分配给 NULL。

于 2012-12-17T13:07:52.813 回答