封装-关于面试提到的函数问题

问题描述

关于面试提到的函数问题

面试时问到:我现在要封装malloc函数,以下两种封装形式哪种更好,为什么?
#define IN
#define OUT

void myMalloc(IN int size, OUT void * p);
void * myMalloc(IN int size);

第一个是以参数的形式来输出得到的内存地址,第二个是以返回值的形式来得到内存地址?哪个更好?问了很多人,没人说出个所以然来,不知哪个大神能解决下!!

解决方案

第一个好点,第二个容易忘记适当内存造成泄露

解决方案二:

楼主看看这个帖子就知道了http://bbs.chinaunix.net/thread-1279614-1-1.html

解决方案三:

第二种,写起来简便些

解决方案四:

两者都有,不同的使用习惯而已。没什么优劣

解决方案五:

亲在csdn上也看到你的提问了,我觉得是第二种,他考察的应该不是那些什么忘记释放内存什么的,我觉得是考察函数传递参数原理(考虑下值传递和指针传递),传递函数的参数,函数是另外复制了一个void *p的,操作的也是副本的void*p。

解决方案六:

亲在csdn上也看到你的提问了,我觉得是第二种,他考察的应该不是那些什么忘记释放内存什么的,我觉得是考察函数传递参数原理(考虑下值传递和指针传递),传递函数的参数,函数是另外复制了一个void *p的,操作的也是副本的void*p。

解决方案七:

亲在csdn上也看到你的提问了,我觉得是第二种,他考察的应该不是那些什么忘记释放内存什么的,我觉得是考察函数传递参数原理(考虑下值传递和指针传递),传递函数的参数,函数是另外复制了一个void *p的,操作的也是副本的void*p。

解决方案八:

亲在csdn上也看到你的提问了,我觉得是第二种,他考察的应该不是那些什么忘记释放内存什么的,我觉得是考察函数传递参数原理(考虑下值传递和指针传递),传递函数的参数,函数是另外复制了一个void *p的,操作的也是副本的void*p。

解决方案九:

亲在csdn上也看到你的提问了,我觉得是第二种,他考察的应该不是那些什么忘记释放内存什么的,我觉得是考察函数传递参数原理(考虑下值传递和指针传递),传递函数的参数,函数是另外复制了一个void *p的,操作的也是副本的void*p。

解决方案十:

哪种更好,关键是第一种能用吗?
你在调用的时候:
void* p;
myMalloc(IN int size, OUT void * p);
p是指针,也是按值传递的,并不能改变主函数里面p的值。
可以用myMalloc(IN int size, OUT void * &p);

时间: 2024-10-21 22:10:57

封装-关于面试提到的函数问题的相关文章

python模块创建,如何封装C#中定义的函数

问题描述 python模块创建,如何封装C#中定义的函数 我的平台包含了python脚本编写和执行,其中我在平台中有一个函数是 public class FnValues { public int Pn; public string Fn; public string [] Values; } 而我在python脚本的模块函数中用到了这个函数: def Get_Meter_Reading(cs,a): fnValue1=FnValues(); fnValue1.Fn="30" fnVa

linux网络编程之System V信号量(一) 封装一个信号量集操作函数的工具

与消息队列和共享内存一样,信号量集也有自己的数据结构: struct semid_ds { struct ipc_perm sem_perm;  /* Ownership and permissions */ time_t    sem_otime; /* Last semop time */ time_t    sem_ctime; /* Last change time */ unsigned short  sem_nsems; /* No. of semaphores in set */

封装了一个支持匿名函数的Javascript事件监听器_javascript技巧

关于js中的事件监听大家用的比较多了,无非是判断浏览器是否支持addEventListener和attachEvent,网上搜索关于事件监听的方法也挺多,但是总有些不是很完善.下面的方法中对于添加事件监听的方法是一样的,只不过在取消事件绑定上面做了点手术,现在可以支持匿名函数的使用,所以在绑定事件的时候不再需要给函数单独命名了. 主要代码: 复制代码 代码如下: /*绑定事件与取消绑定*/var handleHash = {};var bind = (function() { if (windo

PHP封装的字符串加密解密函数_php技巧

程序中经常使用的PHP加密解密字符串函数 代码如下: /********************************************************************* 函数名称:encrypt 函数作用:加密解密字符串 使用方法: 加密 :encrypt('str','E','nowamagic'); 解密 :encrypt('被加密过的字符串','D','nowamagic'); 参数说明: $string :需要加密解密的字符串 $operation:判断是加密还

传参-这个go语言封装c函数,使用cgo,参数怎么传?

问题描述 这个go语言封装c函数,使用cgo,参数怎么传? 需要用go语言把下列的c函数封装一下,c的函数如下: int raw_to_span(OPResult result, int *num, int **time, short **status, double **value); 下面是我的写法,不正确,编译不通过: func RawToSpan(result uintptr) (num int, time []int, status []int16, value []float64,

jQuery常用知识点总结以及平时封装常用函数_jquery

本文为大家介绍了jQuery中常用知识点及函数,包含许多细节方面的知识,下面我们一起学习一下. jQuery中为我们提供了很多有用的属性,自己总结的一些常用的函数.个人认为在在线排盘开发中会比较常用的,仅供大家学习和参考. 刚开始学习前端的时候开始整理这个文档,现在内容已经逐渐增多.虽然现在看起来,文档里的内容非常简单,但是看着这些内容,好像还依稀记得这一行行代码当时被记录的情景.所以我想把这段回忆保存起来,为刚接触前端的童鞋们提供一个简单的查询的途径,也以此来缅怀我的前端学习之路. ** 此文

用 PHP 开发健壮的代码(三):编写可重用函数

函数 在本系列文章(有关如何在实际情况下开发有效的 PHP 代码)的第 3 部分中,Amol Hatwar 讨论了如何构建最有效的功能型函数,使用这些函数不会牺牲太多性能或可管理性.作者重点阐述了如何编写可重用函数,并介绍了如何避免与该任务相关的一些最常见问题.欢迎回来.在本系列文章的第 1 部分中,我讨论了一些基本的 PHP 设计规则,并介绍了如何编写安全.简单.与平台无关且快速的代码.在第 2 部分中,我介绍了变量,并讨论了它们在 PHP 编码中的用法 - 好的和坏的实践. 在本文中,您将了

深入理解JavaScript系列(15) 函数(Functions)_javascript技巧

介绍 本章节我们要着重介绍的是一个非常常见的ECMAScript对象--函数(function),我们将详细讲解一下各种类型的函数是如何影响上下文的变量对象以及每个函数的作用域链都包含什么,以及回答诸如像下面这样的问题:下面声明的函数有什么区别么?(如果有,区别是什么). 原文:http://dmitrysoshnikov.com/ecmascript/chapter-5-functions/ 复制代码 代码如下: var foo = function () { ... }; 平时的惯用方式:

C语言回调函数和this指针详细介绍

在C里面,经常需要提供一个函数地址,注册到结构里,然后在程序执行到特定阶段时,回调该函数.创建线程,注册线程运行的主函数就是一个典型的例子.这里以简单的回调实例,说明C++中回调函数为成员函数时有关this指针的问题.由于C++对C的继承关系,C++没有自己的线程封装技术,一般而言我们创建线程时,还是用C的回调函数机制.类似的例子也挺多的.在Java等纯粹的面向对象语言,则不一样,不光有自己的独立的线程类型,对于回调,也是注册整个对象,而不是注册一个方法,如常用的观察者模式.这里,在网上查阅了大