| |
精华:C++编程新手错误语录(续一) |
出处:PConline |
|
| [ 2005-09-08 10:07:13
] |
作者:宋宝华
|
责任编辑:moningfeng |
废话不说,直接进入正题,本文承接先前发布的《C/C++编程新手错误语录》(http://www.pconline.com.cn/pcedu/empolder/gj/c/0508/691597.html),继续归纳错误语录。 (8)“我想用malloc”、“我用不好malloc” 来看看一个变态程序:
/* xx.c:xx模块实现文件 */ int *pInt; /* xx模块的初始化函数 */ xx_intial() { pInt = ( int * ) malloc ( sizeof( int ) ); ... } /* xx模块的其他函数(仅为举例)*/ xx_otherFunction() { *Int = 10; ... } 这个程序定义了一个全局整型变量指针,在xx模块的初始化函数中对此指针动态申请内存,并将pInt指向该内存首地址,并在xx模块的其他函数中都使用pInt指针对其指向的整数进行读取和赋值。
这个程序让我痛不欲生了好多天,扼腕叹息!这是我母校计算机系一位硕士的作品!作者为了用上malloc,拼命地把本来应该用一个全局整型变量摆平的程序活活弄成一个全局整型指针并在初始化函数中“动态”申请内存,自作聪明而正好暴露自己的无知!我再也不要见到这样的程序。
那么malloc究竟应该怎么用?笔者给出如下规则: 规则1 不要为了用malloc而用malloc,malloc不是目的,而是手段;
规则2 malloc的真正内涵体现在“动态”申请,如果程序的特性不需动态申请,请不要用malloc;
上面列举的变态程序完全不具备需要动态申请的特质,应该改为:
/* xx.c:xx模块实现文件 */ int example; /* xx模块的初始化函数 */ xx_intial() { ... } /* xx模块的其他函数(仅为举例) */ xx_otherFunction() { example = 10; ... }
|