相信大多数人会将定长数组换为 指针 , 每次使用时动态的开辟 CURR_LENGTH
大小的空间, 因为这样可以避免造成 MAX_LENGTH - CURR_LENGTH
空间的浪费, 只浪费了一个指针域的空间.
struct point_buffer
{
int len;
char *data;
};
考虑对齐, 那么数据结构的大小 >= sizeof(int) + sizeof(char *)
但是在开辟内存时, 需要调用两次malloc ,第一次给结构体分配内存,第二次给成员data分配内存:
if ((pbuffer = (struct point_buffer *)malloc(sizeof(struct point_buffer))) != NULL)
{
pbuffer- >len = CURR_LENGTH;
if ((pbuffer- >data = (char *)malloc(sizeof(char) * CURR_LENGTH)) != NULL)
{
memcpy(pbuffer- >data, "Hello World", CURR_LENGTH);
printf("%d, %sn", pbuffer- >len, pbuffer- >data);
}
}
释放也需要调用两次free函数 ,先释放数据域指针,再释放结构体指针:
/// 销毁
free(pbuffer- >data);
free(pbuffer);
pbuffer = NULL;
全部0条评论
快来发表一下你的评论吧 !