p = (char *)malloc(…);
if(p==NULL)
…
;
…
/* 一系列针对 p
的操作 */
return p;
}
在某处调用 function(),用完 function 中动态申请的内存后将其 free,
如下:
char *q = function();
…
free(q);
上述代码明显是不合理的,因为违反了 malloc 和 free 成对出现的原则,
即"谁申请,就由谁释放"原则。不满足这个原则,会导致代码的耦合度增大,
因为用户在调用 function 函数时需要知道其内部细节!
正确的做法是在调用处申请内存,并传入 function 函数,如下:
char *p=malloc(…);
if(p==NULL)
…;
function(p);
…
free(p);
p=NULL;
而函数 function 则接收参数 p,如下:
void function(char *p)
{
…
/* 一系列针对 p
的操作 */
}
基本上,动态申请内存方式可以用较大的数组替换。对于编程新手,笔者
推荐你尽量采用数组!嵌入式系统可以以博大的胸襟接收瑕疵,而无法"海
纳"错误。毕竟,以最笨的方式苦练神功的郭靖胜过机智聪明却范政治错误走
反革命道路的杨康。
给出原则:
(1)尽可能的选用数组,数组不能越界访问(真理越过一步就是谬
误,数组越过界限就光荣地成全了一个混乱的嵌入式系统);