我想为下面的结构分配内存
typedef struct {
int *buffer;
int length;
int dsn;
int handle;
} myStr;
哪个是正确的?
myStr *pStr = malloc(sizeof(myStr)+lenOfBuff);
或
myStr *pStr = malloc(sizeof(myStr));
我在一些使用第一个的示例中看到,但对我来说似乎有点奇怪。是否必须同时为数据Buffer分配内存??
最佳答案
视情况而定。
如果创建后要改变缓冲区的长度,需要单独分配。如果没有,您可以在单个 malloc()
调用中共同分配这两个 block ,这可能会稍微更有效率。
共同分配看起来像这样:
myStr * mystr_create(size_t initial_size)
{
myStr *ptr;
ptr = malloc(sizeof *ptr + initial_size * sizeof *myStr->buffer);
ptr->buffer = (int *) (ptr + 1);
ptr->length = initial_size;
ptr->dsn = ... something ...
ptr->handle = ... something ... *
return ptr;
}
关于c - 复杂数据类型的内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12281161/