社区
C语言
帖子详情
问一个问题,C++中指针定义后,在什么情况下非需要new操作
愤怒对抗喳喳
2001-07-21 03:36:41
如果说一个结构
HOSTENT *hp;
函数gethostbyaddr返回HOSTENT *
这样写
HOSTENT *hp;
hp=new HOSTENT;
hp=gethostbyaddr();
这里的hp=new HOSTENT能不能不写,是不是非得写
...全文
492
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++
的
new
本文深入解析
C++
中
的
new
关键字,探讨其内部运作机制,包括内存分配、构造函数调用及
指针
返回等过程。此外,还介绍了
new
操作
符的三种形式、内存分配异常处理、自
定义
new
_handler以及STL内存管理技巧等内容。
c++
中
指针
的内存申请和内存释放
问
题
本文详细解释了
C++
中
new
与delete
操作
的作用,包括
指针
new
操作
时如何在内存堆
中
分配空间及存储地址,delete
操作
时如何释放
指针
指向的内存区域,以及空
指针
的安全使用方法。
[
C++
] 关于
new
操作
符的重载
本文深入解析
C++
中
new
操作
符的三种用法:
new
operator、operator
new
和placement
new
,及其与delete
操作
符的关系。探讨了如何重载operator
new
以自
定义
内存分配策略,并介绍了placement
new
在特定内存初始化
中
的应用。
C++
中
指针
数组的分配与释放
本文详细介绍了在
C++
中
如何使用
new
和delete关键字正确地分配和释放
指针
数组的内存,避免内存泄漏,包括指向
指针
的
指针
的使用方法。
c++
中
指针
数组 数组
指针
new
本文深入解析了
C++
中
指针
与数组的关系及应用,包括普通数组、
指针
数组、指向
指针
的
指针
、动态内存分配等概念。通过实例展示了不同类型的
指针
变量如何
操作
数组,以及如何使用
new
关键字进行内存分配。
C语言
70,039
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章