打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

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

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

01#include <stdio.h>
02#include <stdlib.h>
03#include <string.h>
04  
05// 回调函数
06// 使用这种技巧,在回调函数中就不用关注缓冲区的释放了
07void 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  
15void 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  
24int 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()就用到

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
高质量C/C++编程(片段)
浅析C语言中关于字符串的操作 - C/C++ - 课堂 - 话题 - 张剑 - CSDN学...
03选择题: C++内存重叠 拷贝
C 11很吊的新特性!std::function
Android系统中视频电话中camera部分数据流分析
C++开发者都应该使用的10个C++11特性
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服