繁体   English   中英

malloc时指针之间的区别

[英]Difference between pointers when malloc

我通常将自己构造为一个结构,并为该结构分配内存,有时还为该结构内部的缓冲区分配内存。 像这样:

typedef struct A
{
  char *buffer;
  int size;
} A;

然后,当我为结构体分配内存时,我就这样做了。 (我学会了不在此处将malloc返回转换为SO。)

X

A *a = malloc(sizeof(a));
a->buffer = malloc(10*sizeof(a->buffer));

X和Y this有什么区别?

ÿ

 A *a = malloc(sizeof(*a));
 a->buffer = malloc(10*sizeof(a->buffer));

他们似乎在做同样的事情。

都不正确,第二个甚至不编译。

您需要以下任何一个:

A * a = malloc(sizeof(A));    // repeat the type

// or:

A * a = malloc(sizeof *a);    // be smart

然后:

a->size = 213;
a->buffer = malloc(a->size);

您应该进行类型转换(A *),因为calloc或malloc返回void *。

A *a=(a*)malloc(sizeof(A));

假设您要为缓冲区分配10个字符的内存

a->buffer=(char *)malloc(sizeof(char)*10);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM