c - 复杂数据类型的内存分配

标签 c memory-management malloc typedef

我想为下面的结构分配内存

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/

相关文章:

c - C语言中的移动蛇

c - malloc 如何区分占用相同空间的不同类型?

ios - GPUImage内存错误

c - 在C中初始化一个动态数组

c free() 导致崩溃,但数据本身正常工作并且大小正确

c - 首先通过套接字发送我要发送的文件的大小

c - GCC错误但VS没有错误

python - 使用 Python 制作预处理器

c++ - 在构造期间抛出 bad_alloc 时如何实现正确的堆栈展开和 raii

c - C 中的动态内存分配