background image

 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)尽可能的选用数组,数组不能越界访问(真理越过一步就是谬
误,数组越过界限就光荣地成全了一个混乱的嵌入式系统);