本帖最后由 问天少年 于 2022-9-15 15:28 编辑
2.2堆内存的获取方法看到本小节标题,可能有些同学有疑惑,上一小节中的malloc函数,不就是堆内存的获取方法吗?的确是,通过malloc函数申请是最直接的获取方法,如果只知道这种堆内存获取方法,就容易掉到坑里了。一般的来讲,堆内存有如下两种获取方法: 方法一:将函数返回值直接赋给指针,一般表现形式如下: char *local_pointer_xx = NULL;
local_pointer_xx = (char*)function_xx(para_xx, …);
该类涉及到内存申请的函数,返回值一般都指针类型,例如: GSList* g_slist_append (GSList *list, gpointer data);
方法二:将指针地址作为函数返回参数,通过返回参数保存堆内存地址,一般表现形式如下:
int ret;
char *local_pointer_xx = NULL; /**转换后的字符串**/
ret = (char*)function_xx(..., &local_pointer_xx, ...);
该类涉及到内存申请的函数,一般都有一个入参是双重指针,例如: __STDIO_INLINE _IO_ssize_t;
getline (char **__lineptr, size_t *__n, FILE *__stream);
前面说通过malloc申请内存,就属于方法一的一个具体表现形式。其实这两类方法的本质是一样的,都是函数内部间接申请了内存,只是传递内存的方法不一样,方法一通过返回值传递内存指针,方法二通过参数传递内存指针。
|