我通常使自己成为一个结构体,并为结构分配内存,有时为结构内部的缓冲区分配内存。像这样:
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));
他们似乎在做同样的事情。
答案 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);