malloc时指针之间的区别

时间:2013-12-07 13:04:00

标签: c pointers malloc

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

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

然后当我在malloc中使用struct时,我就这样做了。 (我学会了不要在这里施放malloc返回。)

X

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

X和Y有什么区别?

ý

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

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

2 个答案:

答案 0 :(得分:6)

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

你想要其中任何一个:

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

// or:

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

然后:

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

答案 1 :(得分:0)

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

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

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

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