C语言使用回调函数解决内存申请和释放的问题
http://www.oschina.net/question/23734_35213
C语言中,函数参数或者返回值中如果包含指针指向动态分配的内存区域,那么管理申请和释放就显得十分麻烦,一不小心就容易出错,今天突发奇想借鉴高级语言函数式编程的思想,其实C语言里的函数指针已经非常完美了,如果这样写,管理起来就会很方便,callback中无需关注buffer的释放。
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
#include
<stdio.h>
#include
<stdlib.h>
#include
<string.h>
//
回调函数
//
使用这种技巧,在回调函数中就不用关注缓冲区的释放了
void
callback( const
char
* buffer, int
len) {
int
i;
for
(i = 0; i < len; i++) {
putchar (buffer[i]);
}
putchar ( "
" );
}
void
foo( void
(* callback)( const
char
*, int ))
{
char
* buffer;
buffer
= ( char
*) malloc (100);
memset (buffer,
0, 100);
strcpy (buffer,
"Hello,
World!" );
callback(( const
char
*)buffer, strlen (buffer));
free (buffer);
}
int
main() {
//
下面两种方式都行,不知道为什么
foo(&callback);
foo(callback);
return
0;
}
|
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。