指針數據包
相信大多數人會將定長數組換為 指針 , 每次使用時動態的開辟 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;
- 優點 :不會造成空間的大量浪費,只多使用了一個指針大小的空間
- 缺點 :開辟空間時需要額外開辟數據域的空間,釋放時也需要先釋放數據域的空間。假如用戶不知道這個數據包創建的具體細節,有可能會只釋放結構體指針,不釋放數據域指針。因此容易造成內存泄露。
-
C語言
+關注
關注
180文章
7604瀏覽量
136692 -
指針
+關注
關注
1文章
480瀏覽量
70551 -
數據包
+關注
關注
0文章
260瀏覽量
24385
發布評論請先 登錄
相關推薦
評論