【发布时间】:2013-12-07 13:03:59
【问题描述】:
我通常让自己成为一个结构体,并为结构体分配内存,有时为结构体内部的缓冲区分配内存。像这样:
typedef struct A
{
char *buffer;
int size;
} A;
然后,当我为结构进行 malloc 时,我会这样做。 (我学会了不要在 SO 上使用 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));
他们似乎在做同样的事情。
【问题讨论】:
-
我假设您的
buffer指针指向任意数量的数据?从您的代码 sn-p 中不清楚。在这种情况下,a->buffer = malloc(sizeof(a->buffer)是错误的,因为它总是只分配 4 个字节或 8 个字节,具体取决于您是在 32 位还是 64 位机器上。 -
区别在于
sizeof(a*)是一个语法错误,而sizeof(a)是更微妙的错误。 -
为什么要为我们的缓冲区分配10倍的缓冲区指针大小?
-
我想为 10 个字符分配空间。