主题:下面几个小程序,哪几个有问题?啥问题?30分
davies
[专家分:40] 发布于 2007-12-12 11:21:00
int *f1(void)
{
int *ptr;
ptr = (int *)malloc(sizeof(int));
return ptr;
}
int *f2(void)
{
int x=10;
return (&x);
}
int *f3(void)
{
int *ptr;
*ptr = 10;
return ptr;
}
回复列表 (共4个回复)
沙发
sjohn [专家分:5600] 发布于 2007-12-13 19:15:00
就第一个没有问题,后两个都有问题
问题是函数返回的指针没有用。
第一个函数返回的指针是指向某个具体可用物理地址的。这个物理地址位于程序的堆区(heap section),要么在程序运行中通过free()操作释放,要么等到程序退出时操作系统回收这个地址
后两个程序均能返回一个地址,不过这个地址调用它的函数既不能往里头写东西,也不能保证立即从中读出来的内容就一定是原来预定的10——由编译器设定的方式决定了局部变量如何被清除。这种情况,不如返回一个副本(copy)而不是一个指针来得安全自然加高效。
板凳
davies [专家分:40] 发布于 2007-12-14 18:23:00
第一个如果申请内存失败了那不是返回NULL阿!返回空NULL不会出错么
3 楼
sjohn [专家分:5600] 发布于 2007-12-19 23:09:00
嗯,2楼说的情况就最好用try catch来解决了
不过普通32位PC实现第一个程序肯定不会申请内存失败的,因为sizeof(int)才只有4
4 楼
moke5 [专家分:30] 发布于 2010-09-01 14:34:00
你好.我是全职网赚工作者.
如果你有时间有电脑.会打字.
想在网络上创业.请联系我..
项目绝对真实.详情QQ空间资料
加盟请联系 QQ909065437
我来回复