c语言 申请1k内存,怎么解决函数内申请内存,函数外释放的问题

由于不同的编译器和库,其内部关于内存申请释放的实现不同,因此不能直接要求用户指定用某个函数释放内存,必须要单独自己封装一个释放的接口。有两种思路:

一是以指针作为参数得到数组地址,单独设计一个释放的函数,内部与你的获取数组函数内存管理函数一致。

BOOL CreateArray(int **pp)

{

if (pp != NULL) {

// 其他算法

int *array = (int *)malloc(...);

if (array != NULL) {

*pp = array;

return TRUE;

}

}

return FALSE;

}

void CloseArray(int *p)

{

if (p != NULL) {

free(p);

}

}

// 使用

int *array = NULL;

if (CreateArray(&array)) {

// 创建成功,使用数组 arr

// 使用完毕释放数组

CloseArray(array);

}

二是学习微软,对外隐藏全部的结构,仅返回一个类似 HANDLE 这样的匿名类型,内部包装自己的数据结构,任何数据都通过这个 HANDLE 来访问。

// 声明自己的私有结构体

typedef struct {

int *arr;

// 其他成员变量

} EXAMPLE;

HANDLE CreateObject()

{

EXAMPLE *handle = (EXAMPLE *)malloc(sizeof(EXAMPLE));

if (handle != NULL) {

// 其他算法

handle->arr = (int *)malloc(...);

if (handle->arr == NULL) {

free(handle);

handle = NULL;

}

}

return (HANDLE)handle;

}

int *GetArray(HANDLE p)

{

EXAMPLE *handle = (EXAMPLE *)p;

if (handle != NULL) {

return handle->arr;

} else {

return NULL;

}

}

void CloseObject(HANDLE p)

{

EXAMPLE *handle = (EXAMPLE *)p;

if (handle != NULL) {

if (handle->arr != NULL) {

free(handle->arr);

}

free(handle);

}

}

// 使用

HANDLE obj = CreateObject();

if (obj != NULL) {

int *array = GetArray(obj);

// 使用数组 arr

CloseObject(obj);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值