回 帖 发 新 帖 刷新版面

主题:下面几个小程序,哪几个有问题?啥问题?30分

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个回复)

沙发

就第一个没有问题,后两个都有问题

问题是函数返回的指针没有用。

第一个函数返回的指针是指向某个具体可用物理地址的。这个物理地址位于程序的堆区(heap section),要么在程序运行中通过free()操作释放,要么等到程序退出时操作系统回收这个地址

后两个程序均能返回一个地址,不过这个地址调用它的函数既不能往里头写东西,也不能保证立即从中读出来的内容就一定是原来预定的10——由编译器设定的方式决定了局部变量如何被清除。这种情况,不如返回一个副本(copy)而不是一个指针来得安全自然加高效。

板凳

第一个如果申请内存失败了那不是返回NULL阿!返回空NULL不会出错么

3 楼

嗯,2楼说的情况就最好用try catch来解决了

不过普通32位PC实现第一个程序肯定不会申请内存失败的,因为sizeof(int)才只有4

4 楼

你好.我是全职网赚工作者.
如果你有时间有电脑.会打字.
想在网络上创业.请联系我..
项目绝对真实.详情QQ空间资料
加盟请联系 QQ909065437

我来回复

您尚未登录,请登录后再回复。点此登录或注册