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

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/417606.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL Server CLR 启用、部署

sqlserver启用CLRexec sp_configure clr enabled,1 --1,启用clr 0,禁用clrRECONFIGURESQL Server CLR 部署到某个数据库后,便成为那个数据库的一部分,即便备份及还原到其它机器上,它依然具有CLR带来的功能。SqlString 数据类型转换成 nvarcha…

mysql 慢查询过多_MySQL 慢查询优化

为什么查询速度会慢1.慢是指一个查询的响应时间长。一个查询的过程:客户端发送一条查询给服务器服务器端先检查查询缓存,如果命中了缓存,则立可返回存储在缓存中的结果。否则进入下一个阶段服务器端进行SQL解析、预处理,再由优化器…

sqlserver获得到当前游标中存在的数据行数

Select CURSOR_ROWS 可以得到当前游标中存在的数据行数。 注意:此变量为一个连接上的全局变量,因此只对应最后一次打开的游标。

android beta项目官方页面,安卓7.0开发者预览版如何安装?Android Beta项目正式上线...

谷歌现在越来越不按常理出牌了,今天早些时候,他们已经提前秀出了Android 7.0。从最新亮相的Android N开发者预览版来看,谷歌进行了一些调整,但更重要的是,增加了一些新的功能,比如分屏、新的通知控制等。那…

iOS-模糊查询

http://blog.csdn.net/qq_33701006/article/details/51836914 版权声明:本文为博主原创文章,未经博主允许不得转载。 目录(?)[] 前言: 为了巩固FMDB,就来找个简单的Demo学习一下。不好找工作啊,就学习吧,没应聘的消遣吧。 简单介…

嵌入式操作系统一览

其实,嵌入式系统并不是一个新生的事物,从八十年代起,国际上就有一些IT组织、公司,开始进行商用嵌入式系统和专用操作系统的研发。这其中涌现了一些著名的嵌入式系统: Windows CEMicrosoft Windows CE是从整体上为有限资…

connect跨进程 qt_编写 Qt 跨线程异步调用器

本文使用 Zhihu On VSCode 创作并发布本文使用 CC BY-NC-SA 4.0 许可协议,转载请注明来源一、设计背景众所周知,Qt 的信号槽系统提供了线程安全的跨线程异步执行代码的机制(Qt::QueuedConnection)。使用该机制,可以让槽函数代码在另一个线程执…

Web开发入门疑问收集(不定期更新)

bootstrap container和container-fluid的区别 原始链接 container根据显示设备满足的最小宽度,来决定实际内容宽度,是一个根据设置内容阶梯式响应的布局。例子:media (min-width: 568px) {.container {width: 550px;} } media (min-width: 99…

钱币掉落动画android,mpvue实现小程序签到金币掉落动画(api实现)

这里使用小程序自带的api来实现,用小程序来写动画的恶心点在于,没有帧,只能用setimeout 来作为帧来使用,下面是实现代码, 下面是简单用div代替了图片,需要什么图片,可以自行替换相应的div即可需…

前端学习(2197):__WEBPACK_IMPORTED_MODULE_1_vuex__.a.store is not a constructor

在使用vuex过程中,发现报错 typeError:__WEBPACK_IMPORTED_MODULE_1_vuex__.a.store is not a constructor 经查找发现是实例化时 .store用的小写造成的,如下 new Vuex.store({state:{},mutations:{},actions:{},modules:{} }) 实际应为大写!(居然有和…

c常见错误

///Segmentation fault段错误可能有未初始化的变量导致段错误的几种情况1、 引用一个包含非法值的指针(当然包括空指针)。2、 未得到正确的权限的时候进行访问,例如往只读的内存地址写数据。3、 内存越界(数组越界,变量…

python学多久能写东西的软件有哪些_怎么自学python,大概要多久?

看完这些还不会算我输1、一小时Python 基础和编码规范鹅厂员工学习Python总结的教程,可用于快速了解Python,适合有其它语言编程基础的同学看,一个小时带你玩转Python2、400全集Python全套视频教程此套视频信息量非常大,我画了个思…

接口测试之HTTP协议详解

引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范…

android特殊代码,安卓手机输入这些特殊代码,电池状态查得清清楚楚!

原标题:安卓手机输入这些特殊代码,电池状态查得清清楚楚!智能手机在很大程度上方便了我们的生活,但是我们也逐渐依赖上了手机,想更了解自己的手机,知道自己到底在手机哪些地方花费了多少时间吗,…

C gdb调试工具

编译程序cc -g try.c -o try 一 列文件清单  List   (gdb) list line1,line2[编辑本段] 二&#xff1a;执行程序  要想运行准备调试的程序&#xff0c;可使用run命令&#xff0c;在它后面可以跟随发给该程序的任何参数&#xff0c;包括标准输入和标准输出说明符(<和&g…

python3 装饰器参数_Learn Python 3:装饰器

一、理解装饰器通俗点说&#xff0c;当我们想给一个函数增强额外的功能&#xff0c;但又不想修改原函数的定义&#xff0c;同时新增的功能其它函数可能也需要使用&#xff0c;装饰器就是来解决这种需求的&#xff0c;将与原函数功能无关的代码提取出来&#xff0c;实现复用&…

android 三星 白色,时尚实用都拥有 白色Android手机盘点

唯美大气&#xff1a;三星I9000三星I9000的高人气不用多说&#xff0c;许多人在看过了黑色之后也等待着白色版本的上市。而在上周该机的白色版本也终于到来&#xff0c;赶在圣诞节之前为我们提供了多一种的白色Android机型选择。从图片中可以看出I9000机身正面依旧为黑色&#…

XidianOJ 1099 A simple problem

题目描述 一个长度为N的数组A&#xff0c; 所有数都是整数 &#xff0c;0 < A[i] < 1000000&#xff0c;1 < i < N&#xff0c;1 < N < 100000&#xff0c;对于 任意i&#xff0c;j &#xff0c;1 < i < j < N&#xff0c;[i&#xff0c; j]中所…

C字符操作函数大全

函数名: stpcpy 功 能: 拷贝一个字符串到另一个 用 法: char *stpcpy(char *destin, char *source); 程序例: #include <stdio.h> #include <string.h> int main(void) { char string[10]; char *str1 "abcdefghi"; stpcpy(string, str1); …