- 论坛徽章:
- 0
|
原帖由 asdf511 于 2007-6-28 17:13 发表于 2楼
*p = (char *)malloc(24);//这样是不是会有问题呢?
这样倒是没问题的,有时候我们会看到这样的函数
int createXXXX(XXXX** pX);
在函数内部给*pX分配内存。跟这里做的是一样的。
只是楼主的3个free是错的。
p1, p2, p3都是把一个char**强转成char*...... p本身并没有指向分配的内存啊。
也许LZ是想写成类似于p1 = (char*)(*p) ?
那free p2,p3也是不对滴。malloc和free要一一对应。
查看某块内存是否被释放可能没什么好方法吧,有个简单一点的,有点帮助的方法,就是封装malloc和free,malloc出来的内存都填充一个特殊的数,free之后的内存都填充另一个特殊的数。比如VC里debug版本下,malloc出来的就全是CDCDCD....(? 记不清)。 对一个指针来说,可以查看它前后是不是都是这样特殊的数,来判断该内存是否已经被释放。当然这个方法并不是充分的。
如果要严格控制和了解内存的使用情况,可能需要自己实现memory pool了。这样,对于任一指针判断它是否已经被释放,那方法可能就比较多,我没研究过,现在我想到最直白的方法就是另外找一个1/8大小的数组,每一个bit标志pool中每一个字节,哈哈,很丑很丑。 |
|