Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2097612
  • 博文数量: 414
  • 博客积分: 10312
  • 博客等级: 上将
  • 技术积分: 4921
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-31 01:49
文章分类

全部博文(414)

文章存档

2011年(1)

2010年(29)

2009年(82)

2008年(301)

2007年(1)

分类: C/C++

2008-05-12 23:47:58

建立一个结构体里面包含一个指针用来存放数据。

最初的定义是这样的

typedef struct _NODE

{

    char *pData;

    int nLength;

} Node;

使用的时候:

Node *pNode = (Node*)malloc(sizeof(Node));

pNode->Data = (char*)malloc(pNode->nLength);

这样是没有任何问题的,但是却有内存碎片的产生,本来这个pNode 和 p->Data就是一起用的,所以最好分配到一个内存的地方。

 

解决办法:

typedef struct _Node

{

   int nLength;

    char pData[1];

} Node;

 

具体的使用方法:

int nDataLength = (nLenght == 0 ? 1 : nLength) - 1;

Node *pNode = (Node*)malloc(sizeof(Node) + nDataLength);

这样就避免了内存碎片的问题。

 

另外上面又有一个小技巧就是对齐问题:

由于C语言中编译器是四字节对齐的,所以上面需要加上nPedding[3]来占位。

阅读(2048) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

biosli2008-06-26 17:31:56

另外,我想问一下,free的时候是不是直接free(pNode)就可以了,这样会不会有内存泄漏。

biosli2008-06-26 16:52:33

哦~~原来是这么回事啊!!!!多谢多谢!!