社区
C语言
帖子详情
问一个问题,C++中指针定义后,在什么情况下非需要new操作
愤怒对抗喳喳
2001-07-21 03:36:41
如果说一个结构
HOSTENT *hp;
函数gethostbyaddr返回HOSTENT *
这样写
HOSTENT *hp;
hp=new HOSTENT;
hp=gethostbyaddr();
这里的hp=new HOSTENT能不能不写,是不是非得写
...全文
348
21
打赏
收藏
问一个问题,C++中指针定义后,在什么情况下非需要new操作
如果说一个结构 HOSTENT *hp; 函数gethostbyaddr返回HOSTENT * 这样写 HOSTENT *hp; hp=new HOSTENT; hp=gethostbyaddr(); 这里的hp=new HOSTENT能不能不写,是不是非得写
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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
1. C 语言
中
的
指针
和内存泄漏 5 2. C语言难点分析整理 10 3. C语言难点 18 4. C/
C++
实现冒泡排序算法 32 5.
C++
中
指针
和引用的区别 35 6. const char*, char const*, char*const的区别 36 7. C
中
可变参数函数实现 38 8. C程序内存
中
组成部分 41 9. C编程拾粹 42 10. C语言
中
实现数组的动态增长 44 11. C语言
中
的位运算 46 12. 浮点数的存储格式: 50 13. 位域 58 14. C语言函数二维数组传递方法 64 15. C语言复杂表达式的执行步骤 66 16. C语言字符串函数大全 68 17. C语言宏
定义
技巧 89 18. C语言实现动态数组 100 19. C语言笔试-运算符和表达式 104 20. C语言编程准则之稳定篇 107 21. C语言编程常见
问
题
分析 108 22. C语言编程易犯毛病集合 112 23. C语言缺陷与陷阱(笔记) 119 24. C语言防止缓冲区溢出方法 126 25. C语言高效编程秘籍 128 26. C运算符优先级口诀 133 27. do/while(0)的妙用 134 28. exit()和return()的区别 140 29. exit子程序终止函数与return的差别 141 30. extern与static存储空间矛盾 145 31. PC-Lint与C\
C++
代码质量 147 32. spirntf函数使用大全 158 33. 二叉树的数据结构 167 34. 位运算应用口诀和实例 170 35. 内存对齐与ANSI C
中
struct内存布局 173 36. 冒泡和选择排序实现 180 37. 函数
指针
数组与返回数组
指针
的函数 186 38. 右左法则- 复杂
指针
解析 189 39. 回车和换行的区别 192 40. 堆和堆栈的区别 194 41. 堆和堆栈的区别 198 42. 如何写出专业的C头文件 202 43. 打造最快的Hash表 207 44.
指针
与数组学习笔记 222 45. 数组不是
指针
224 46. 标准C
中
字符串分割的方法 228 47. 汉诺塔源码 231 48. 洗牌算法 234 49. 深入理解C语言
指针
的奥秘 236 50. 游戏外挂的编写原理 254 51. 程序实例分析-为什么会陷入死循环 258 52. 空
指针
究竟指向了内存的哪个地方 260 53. 算术表达式的计算 265 54. 结构体对齐的具体含义 269 55. 连连看AI算法 274 56. 连连看寻路算法的思路 283 57. 重新认识:指向函数的
指针
288 58. 链表的源码 291 59. 高质量的子程序 295 60. 高级C语言程序员测试必过的十六道最佳题目+答案详解 297 61. C语言常见错误 320 62. 超强的
指针
学习笔记 325 63. 程序员之路──关于代码风格 343 64.
指针
、结构体、联合体的安全规范 346 65. C
指针
讲解 352 66. 关于指向
指针
的
指针
368 67. C/
C++
误区一:void main() 373 68. C/
C++
误区二:fflush(stdin) 376 69. C/
C++
误区三:强制转换 malloc() 的返回值 380 70. C/
C++
误区四:char c = getchar(); 381 71. C/
C++
误区五:检查
new
的返回值 383 72. C 是
C++
的子集吗? 384 73. C和
C++
的区别是什么? 387 74. 无条件循环 388 75. 产生随机数的方法 389 76. 顺序表及其
操作
390 77. 单链表的实现及其
操作
391 78. 双向链表 395 79. 程序员数据结构笔记 399 80. Hashtable和HashMap的区别 408 81. hash 表学习笔记 410 82. C程序设计常用算法源代码 412 83. C语言有头结点链表的经典实现 419 84. C语言惠通面试题 428 85. C语言常用宏
定义
450
C++
中
指针
与引用的区别
C++
中
指针
与引用的区别
C++
中
指针
初始化和使用注意事项
在
C++
中
指针
经常会出错,有时候
定义
了
指针
没有初始化直接使用,或者是
定义
指针
的时候,将
指针
置成NULL,但是后面直接对
指针
进行
操作
,这样程序也会出错。对于任何
指针
定义
之后,都要对齐进行初始化。 初始化有几种: 1)
定义
之后置为NULL,这样可以防止
指针
错误地指到我们不知道的内存,如果后面程序
中
对这个
指针
指针
进行
操作
,系统会报出错误。一般
定义
指针
后如果不对其进行初始化,其指向是不确定的。 in
c++
中
指针
,堆栈内存分配重要概念理解汇总(实例注释)
c++
C++
中
指针
和引用的区别
定义
:
指针
是
一个
变量,其值为另
一个
变量的地址,
指针
本身也占用内存空间。声明:使用*符号进行声明int a = 10;//
定义
指针
并初始化用
指针
:需动态内存管理、可选绑定、或实现复杂数据结构(如链表)。用引用:需简化语法、避免拷贝、或强制绑定有效性(如函数参数传递)。int x = 10;//
指针
指向x的地址cout <<"x原始的值" << x << endl;*ptr = 11;//修改
指针
指向的值cout << "修改后x的值" << x << endl << endl;
C语言
70,022
社区成员
243,263
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章