【发布时间】:2013-05-31 20:36:17
【问题描述】:
我想为一个缓冲区分配内存,该缓冲区将来会通过 memcpy 包含一个结构,该结构包含一个先前已动态分配内存的指针。
也就是说,我有一个结构体
struct test_struct {
int num;
char *values;
};
其中test_struct.values 包含num 长度为LENGTH 的字符串数量。我知道我无法获得已分配指针的内存大小,所以我只是通过num 跟踪它。获取此结构大小的最简单/最干净的方法是什么?
我能想出的唯一解决方案是
buf = malloc(sizeof(test_struct) + (num * LENGTH));
但我对这种低级内存管理的东西不熟悉,所以可能会有更好的东西。
【问题讨论】:
-
该结构的大小是恒定的
-
结构的大小永远不会改变,它只是
sizeof(test_struct)。如果您想知道分配的总内存,那么是的,您还需要num * sizeof(*values)。 -
@Taylor 正确。但是,必须为包含它的缓冲区分配足够的内存来保存
values。这就是为什么我用num*LENGTH计算values的大小,然后加上struct本身的大小。 -
@justynnuff:那么,我不确定你的问题是什么?
-
@OliCharlesworth 我想我这个问题的措辞很糟糕。我应该添加我有一个缓冲区
char *buf;和一个结构struct test_struct t_struct;。为 buf 计算malloc的内存大小以便执行memcpy(&buf, &t_struct, ???);的最佳/最干净的方法是什么
标签: c memory-management