牛骨文教育服务平台(让学习变的简单)
博文笔记

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

创建时间:2016-02-16 投稿人: 浏览次数:1284

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; }

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。