snifer

[原创]基于Blackfin系列的数组vs.动态申请

0
阅读(2188)

今天在给Blackfin写一个驱动时,出了个小小问题,却发现了大大的惊喜,写出来跟大家一起交流!!!

在嵌入式系统中动态内存申请存在比一般系统编程时更严格的要求,这是因为嵌入式系统的内存空间往往是十分有限的,不经意的内存泄露会很快导致系统的崩溃。

所以一定要保证你的mallocfree成对出现:

char * function(void)
{
char *p;
p = (char *)malloc( );
if(p==NULL)
;
/* 一系列针对 p 的操作 */
return p;
}
在某处调用 function(),用完 function中动态申请的内存后将其 free,如下:
char *q = function();

free(q);
上述代码明显是不合理的,因为违反了 mallocfree成对出现的原则,即"谁申请,就由谁释放"原则。不满足这个原则,会导致代码的耦合度增大,因为用户在调用function函数时需要知道其内部细节!
正确的做法是在调用处申请内存,并传入 function
char *p=malloc();
if(p==NULL)
;
function(p);

free(p);
p=NULL;
而函数 function 则接收参数 p
void function(char *p)
{
/*一系列针对p的操作*/
}
因此
原则:

(1)尽可能的选用数组(动态申请内存方式可以用较大数组替换),数组不能越界访问
(2)如果使用动态申请,则申请后一定要判断是否申请成功了,并且mallocfree应成对出现!
小小问题,大大文章
Baidu
map