分享

C语言使用回调函数解决内存申请和释放的问题

 orion360doc 2012-04-05

C语言中,函数参数或者返回值中如果包含指针指向动态分配的内存区域,那么管理申请和释放就显得十分麻烦,一不小心就容易出错,今天突发奇想借鉴高级语言函数式编程的思想,其实C语言里的函数指针已经非常完美了,如果这样写,管理起来就会很方便,callback中无需关注buffer的释放。

01 #include <stdio.h>
02 #include <stdlib.h>
03 #include <string.h>
04   
05 // 回调函数
06 // 使用这种技巧,在回调函数中就不用关注缓冲区的释放了
07 void callback(const char * buffer, int len) {
08     int i;
09     for (i = 0; i < len; i++) {
10         putchar(buffer[i]);
11     }
12     putchar('\n');
13 }
14   
15 void foo(void (* callback)(const char *, int)) {
16     char * buffer;
17     buffer = (char *)malloc(100);
18     memset(buffer, 0, 100);
19     strcpy(buffer, "Hello, World!");
20     callback((const char *)buffer, strlen(buffer));
21     free(buffer);
22 }
23   
24 int main() {
25     // 下面两种方式都行,不知道为什么
26     foo(&callback);
27     foo(callback);
28     return 0;
29 }




因为&callback == callback

void foo()可以写成这样比较清晰

typedef void (* callbackPtr)(...) ;

void foo(callbackPtr cb)() 

{

if (!cb) return; //还可以检查空值

...

 cb(...);

...

}

这种写法在win32里很常见,如CreateThread()就用到

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多