社区
C语言
帖子详情
问一个问题,C++中指针定义后,在什么情况下非需要new操作
愤怒对抗喳喳
2001-07-21 03:36:41
如果说一个结构
HOSTENT *hp;
函数gethostbyaddr返回HOSTENT *
这样写
HOSTENT *hp;
hp=new HOSTENT;
hp=gethostbyaddr();
这里的hp=new HOSTENT能不能不写,是不是非得写
...全文
407
21
打赏
收藏
问一个问题,C++中指针定义后,在什么情况下非需要new操作
如果说一个结构 HOSTENT *hp; 函数gethostbyaddr返回HOSTENT * 这样写 HOSTENT *hp; hp=new HOSTENT; hp=gethostbyaddr(); 这里的hp=new HOSTENT能不能不写,是不是非得写
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
21 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
960
2001-07-23
打赏
举报
回复
还是不写的好
roland_c
2001-07-23
打赏
举报
回复
如果这个函数本身会返回它分配的内存区域的地址的话,那么NEW是不必要的,否则的话就需要
lyy_hill
2001-07-23
打赏
举报
回复
1
不能写,new出来的内存引起泄漏。因为你给hp new了一块内存后又把这个指针的值修改了,这样就引起泄漏。你可以在申明hp时用NULL初始化一下就可以了。
darkay
2001-07-23
打赏
举报
回复
这个函数返回的是一个指针,它指向的东西是,gethostbyname的一个静态存储区,没有必要也不应该为hp分配空间。
Chxis
2001-07-23
打赏
举报
回复
那怎样分清是
动态分配的,还是静态的局部变量的地址????
愤怒对抗喳喳
2001-07-23
打赏
举报
回复
这要看这个函数返回的指针是什么,假如是动态分配的
什么是指针动态分配呀
NowCan
2001-07-22
打赏
举报
回复
你说的那个情况不要new。
tiongkohlang
2001-07-22
打赏
举报
回复
1
绝对不能写。
很显然,写了,那么new出来的内存肯定没法释放。(如果这部分内存跟着程序结束而被释放,那么好一些,不过运行过程中还是占用了内存。)
这里只有一个问题,就是在
HOSTENT *hp;
hp=gethostbyaddr();
之后hp能不能被delete的问题。这要看这个函数返回的指针是什么,假如是动态分配的,就应该delete。假如不是,比如就返回一个静态的局部变量的地址,那么就不应该delete。
愤怒对抗喳喳
2001-07-22
打赏
举报
回复
没有一个定论吗
好像写不写new都可以编译通过,到底会出现什么问题
julio
2001-07-22
打赏
举报
回复
我认为用new是必要的,因为gethostbyaddr()是不知道大小的,没法为它分配内存。
仅仅是个人的意见。
ljf1107
2001-07-22
打赏
举报
回复
要写,new是从堆中分配内存,如不用的话,则与gethostbyaddr()的返回值指向同一内存区域
,而gethostbyaddr()的返回值是用new分配的内存吗?我想不是吧。这样在调用复制构造函数的时候,可能会出现浅复制的问题。各位看官,是不是呀?
holysword
2001-07-22
打赏
举报
回复
1
我认为根本不需要进行new操作,因为这样会造成内存泄漏。
而且最好是这样写:
HOSTENT *hp = NULL;
hp=gethostbyaddr();
c_word
2001-07-22
打赏
举报
回复
我认为hp=new HOSTENT 是多余的,
已经有有了hp=gethostbyaddr().
bnwxf
2001-07-22
打赏
举报
回复
1
没找到gethostbyaddr的源代码,所以只能瞎猜:
gethostbyaddr函数的内部,静态声明了一个HOSTENT结构。函数结束后,
这个HOSTENT结构的地址仍然有效,所以它才敢返回指针。
这样,就不需要调用者自己分配内存了。
chinade
2001-07-21
打赏
举报
回复
我看在这可以不写.
函数gethostbyaddr都返回HOSTENT * 给hp
那前面还要hp=new HOSTENT
不是多余吗.
skymost
2001-07-21
打赏
举报
回复
非调用对象的构造函数时,呵呵:-)
愤怒对抗喳喳
2001-07-21
打赏
举报
回复
是吗,一般来说,我如果没有用new,就可以编译,运行却错误,因为没有分配内存,这里是不是不用分配
E
2001-07-21
打赏
举报
回复
不是能不写,是不能写。
hp=new HOSTENT;不能写,写了会有内存漏洞!
new 分配了一段空间,之后hp指向了另一段内存。new 分配的空间不就没人用了吗?
愤怒对抗喳喳
2001-07-21
打赏
举报
回复
如果说调用new是为了给他分配一段内存,可是如果已经有其他的这样的结构的变量复制给他,还需要分配内存吗
efoxxx
2001-07-21
打赏
举报
回复
new会调用构造函数对你的指针进行初始化!这是很好的习惯。
加载更多回复(1)
免费下载:C语言难点分析整理.doc
C++
中
指针
和引用的区别 - **
指针
**可以被重新指向不同的对象。 - **引用**一旦被初始化为
一个
对象,就不能改变引用的对象。 - 引用必须在声明时被初始化,而
指针
可以在任何时候被初始化。 ### 6. const char*, ...
C++
中
指针
初始化和使用注意事项
在
C++
中
指针
经常会出错,有时候
定义
了
指针
没有初始化直接使用,或者是
定义
指针
的时候,将
指针
置成NULL,但是后面直接对
指针
进行
操作
,这样程序也会出错。对于任何
指针
定义
之后,都要对齐进行初始化。 初始化有几种: ...
C++
中
指针
与引用的区别
C++
中
指针
与引用的区别
c++
中
指针
,堆栈内存分配重要概念理解汇总(实例注释)
c++
C++
基础教程:
指针
介绍
指针
是
一个
变量,其值为另
一个
变量的内存地址。通过
指针
,可以访
问
和修改该地址指向的内存
中
的值。int a = 10;// p是指向a的
指针
,存储a的内存地址// 使用*
操作
符访
问
指针
p指向的值return 0;
指针
是
C++
中
的重要概念,...
C语言
70,037
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章