faint,今天一公司的面试题,关于指针的。

bebest 2003-01-10 02:39:06
要求写一函数,分配内存。

int mymalloc(int size, .....)
{
char *p;
p = malloc(size);
....
}

...要求填空。
我这样写的,
int mymalloc(int size, char *s)
{
  char *p;
p = malloc(size);
if(p)
{
s = p;
return size;
}
else
{
s = NULL;
return 0;
}
}

可面试的牛人说不对,问他正确的写法,他还不告诉我,很狂的说。大家看看应该怎么写啊?在线等。

 
...全文
69 70 打赏 收藏 转发到动态 举报
写回复
用AI写文章
70 条回复
切换为时间正序
请发表友善的回复…
发表回复
langziji 2003-01-14
  • 打赏
  • 举报
回复
总的来说,这是对指针的理解问题,一定要弄清楚,前两天我也犯了这个错误,不过运行以后一看结果不对,我就发现了。晚上我回去继续看书。
lionpb 2003-01-14
  • 打赏
  • 举报
回复
少侠指点的是!谢谢!
liem 2003-01-13
  • 打赏
  • 举报
回复
我看要用二级指针作参数,但在作*s=(char *)p前,似乎要将*s所指向的内存释放掉
glassshark 2003-01-13
  • 打赏
  • 举报
回复
int mymalloc(int size, void **s)
{
if(size>0 && s){
*s = malloc(size);
if(!s)
size = 0;
}else{
size = 0;
}
return size;
}
JoshuaLi 2003-01-13
  • 打赏
  • 举报
回复
回复人: chinajiji(菜鸟叽叽) ( ) 信誉:100 2003-01-10 21:46:00 得分:0


JoshuaLi(上述操作保证造成内存泄露) 的那段程序保证"上述操作保证造成内存泄露"!


Thank you chinajiji :D
////////////////////////////////////

谈些陋识,再请斧正!因为默认按值传参,如题以指针为参数。在函数内将此指针指向在局部范围分配的动态内存,程序运行至函数外时即或指针参数又如何?--它仍就为实参的值。局部范围分配的动态内存不可再引用(This is a guaranteed memory leak --Scott D. Meryers)。这一现实始终存在即使使用二重指针,引用型指针:D(如char **s1, char *&s2)。正如有朋友给出的正确做法一样,我们可以通过在函数内将此指针指向的变量指向在局部范围分配的动态内存(或使用指针的引用)。此变化将得以保存。
yczs 2003-01-13
  • 打赏
  • 举报
回复
int mymalloc(int size,void **s)
{
char *p;
p = malloc(size);

if(NULL == p)
{
*s = NULL;
return -1;
}

*s = p;
return 1;
}

就是简单的给size分配个空间 成功返回1 失败返回-1 至于
solotony 2003-01-13
  • 打赏
  • 举报
回复
一行就完成了
void *myalloc(size_t size){ return malloc(size);}
要两个参数是吧
void myalloc(size_t size, void **outp){*outp=malloc(size);}

用了malloc还要想什么?!!!
meidoudou2002 2003-01-13
  • 打赏
  • 举报
回复
同意楼上的!
sdik 2003-01-13
  • 打赏
  • 举报
回复
不好意思! 接着来
你的函数完成的是要给一指针分配内存。
但函数并不能改变实参的值,但可以用地址传送。
所以要用**s函数的实参在给分配内存!
int mymalloc(int size;char **s)
{
char *p;
p=(char*)malloc(size);
if(p==null)
{
*s=null;
return -1;
}
if(p)
{
*s=p;
return1;
}
}


sdik 2003-01-13
  • 打赏
  • 举报
回复
你的函数完成的是要给一指针分配内存。
但函数并不能改变实参的值,但可以用地址传送。
所以要用**s函数的实参在给分配内存!
int mymallcoc(int size, char**s)
{

xueqt 2003-01-13
  • 打赏
  • 举报
回复
chinajiji(菜鸟叽叽) :

你很强!
高手!
web_spider 2003-01-12
  • 打赏
  • 举报
回复
chinajiji(菜鸟叽叽):
谢谢,我现在自己写的程序都是用new/delete,
有些帖子用的是malloc/free,我可能在修改的时候没注意,
最后释放的时候自己就用delete。
谢谢。
很高兴认识你。
lni 2003-01-12
  • 打赏
  • 举报
回复
u have lose the p when out function!
tackdhly 2003-01-12
  • 打赏
  • 举报
回复
up
:)
huguozhong141 2003-01-12
  • 打赏
  • 举报
回复
//我也来凑热闹
include<iostream>
#include<stdlib.h>
#include<malloc.h>
using namespace std;
int Mymalloc(int size,char *&str);
// param size is the length
// param &ptr just the pointer strp in main fucnction
int Mymalloc(int size,char *&str)
{
char *p=NULL;
p =(char *)malloc(size);
str=p;
cout << p << endl;
cout << str << endl;
return size;
}
void main()
{
int sz=100;
char *strp=NULL;
Mymalloc(sz,strp);
cout << strp << endl;
free(strp);//before return you must free the memory.
return ;
}
hero4 2003-01-11
  • 打赏
  • 举报
回复
但是我使用VC编译器,那么这种程序是当做C处理呢还是C++处理呢?
windaway 2003-01-11
  • 打赏
  • 举报
回复
hehe ,我觉得这个还是用下面这句话来解释的好:

C语言中实参变量和形参之间的数据传递是单向的“值传递”方式,指针变量作为函数参数也要遵循这一规则,调用函数不能改变实参变量的值,但可以改变实参变量所指变量的值。


摘自《C程序设计》
chinajiji 2003-01-11
  • 打赏
  • 举报
回复
只是不心掉了一个括号,但瑕不掩玉之美.
chinajiji 2003-01-11
  • 打赏
  • 举报
回复
SwordMan2001(天笑2001)的写法的确很简练,欣赏!
tuxw 2003-01-11
  • 打赏
  • 举报
回复
C语言中实参变量和形参之间的数据传递是单向的“值传递”方式,指针变量作为函数参数也要遵循这一规则,调用函数不能改变实参变量的值,但可以改变实参变量所指变量的值。

to windaway(随风而逝):
他的函数确实向S传了值,且退出时S仍指向函数中分配内存的首地址。只是跳出函数后该段内被释放了,因为P也指向该段内存而退出函数时P必然会被释放。
加载更多回复(50)

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧