指针的危害

pengliqing1113 2012-06-05 09:44:16
C++中指针是天使更是魔鬼,特别对于初学者来说,它浪费了无数程序员无数的时间,前赴后继。
使用指针很容易出错,常见的问题有内存越界,野指针等等。而且出错后问题很难查,有时候程序出错后,不会马上崩溃,而是过了很久;程序崩溃的地方通常也不是代码出错的地方;或者程序运行很久后偶尔出现一次bug;等等。
可惜的是,C++的教科书上一般不会强调指针的危害,导致了很多程序员使用指针泛滥,而当你工作久了之后就会切身的体会到问题的严重性,这通常是由于无数次的彻夜调试。
指针使用方便,但是它带来的问题和它带来的好处一样多。再有经验再细心的程序员,也无法保证使用指针完全没有bug,使用指针常常意味着整天担心程序会出错。
我们可以不使用指针,指针有很多的替代品,相比指针非常安全,比如智能指针(不会有野指针的问题),vector(数组越界的问题就少多了),string等等,只有在不得不用指针的时候才使用。
这就是我对C++指针的一点点批判。
...全文
8376 251 打赏 收藏 转发到动态 举报
写回复
用AI写文章
251 条回复
切换为时间正序
请发表友善的回复…
发表回复
linuxdog2 2014-02-26
  • 打赏
  • 举报
回复
delete后置p=NULL是最要的了, 这样避免操作野指针,不崩溃,自己还以为没事呢? 封成这样子比较好了: #define DELETE(p) do { delete p; p=NULL; } while (0)
蓝鹰 2012-12-29
  • 打赏
  • 举报
回复
不能说刀子会砍伤人就不用到做饭了吧。楼主这是月经帖
不敢堕落的龙 2012-12-29
  • 打赏
  • 举报
回复
要学做语言的主人,而不是语言的奴隶!
漫步者、 2012-12-29
  • 打赏
  • 举报
回复
明天好,会的 2012-12-28
  • 打赏
  • 举报
回复
std::shared_ptr<T>
疯狂的红豆 2012-12-28
  • 打赏
  • 举报
回复
引用 30 楼 alienwinner 的回复:
引用 6 楼 的回复:1 避免野指针的产生,野指针产生的情况 a)定义指针未初始化 int* p; b) 指针p被free或者delete后没有置NULL 2 使用指针要注意分配空间,不要犯如下错误。  char* p=NULL; strcpy(p,"abc"); 3 返回局部变量的指针或者引用,函数内定义的局部变量在调用结束后会释放,返回这个……
你的这段代码我运行了一下,错误是写入内存0x00000000是出错,就是说你往一个不合法的内存里写东西。 原因是你的参数char *p是一个局部变量,对于这个函数: void get(char *p) { p=(char *)malloc(100); //在执行到函数的末尾时,p作为一个局部变量,内存空间被编译器回收了。 } 所以你在主函数中的get(str);是无效的,或是未定义的行为了。 解决:传一个指针的引用进去,void get(char *&p);这么久可以了,这时候malloc函数挖出的空间将不会赋给一个局部指针变量了,而是给主函数中的一个指针变量了。
SKATE11 2012-12-28
  • 打赏
  • 举报
回复
所以用C开发相同的东西 开发人员的水平要比用其他语言要求的高
xxb249 2012-12-28
  • 打赏
  • 举报
回复
指针???指针不就是变量嘛!!有什么啊!! 知道怎么申请 知道怎么使用 知道怎么释放 一切都ok了 有没有危害吗?? 就是因为有危害才要经常使用它!! 指针就是弹簧,你强它弱,你弱它强!!
zhcosin 2012-12-28
  • 打赏
  • 举报
回复
对指针的掌握程度标志着一个 C/C++ 程序员的水平。 对指针的掌握程度标志着一个 C/C++ 程序员的水平。 对指针的掌握程度标志着一个 C/C++ 程序员的水平。 对指针的掌握程度标志着一个 C/C++ 程序员的水平。
zhcosin 2012-12-28
  • 打赏
  • 举报
回复
我来说句公道话吧,虽然发这帖子的人纯粹是找喷: 指针是具有两面性的,效率是很高,但是你如果不正确使用的话,所付出的代价也不小,但有一个毫无疑问的事实必须承认:对指针的掌握程度标志着一个 C/C++ 程序员的水平。
氰客 2012-12-28
  • 打赏
  • 举报
回复
真相居然是灌水- -
lin5161678 2012-12-28
  • 打赏
  • 举报
回复
不用指针??嗯 实现一个helloworld吧 LZ 我看好你 这个该怎么传参数啧啧
zilaishuichina 2012-12-28
  • 打赏
  • 举报
回复
空气中同样含有很多细菌 lz是不是连空气也要批判 用不好指针 lz可以选择别用 不能因为你用不好 就说指针不好
zhcosin 2012-12-28
  • 打赏
  • 举报
回复
批评指针的人都是用不好指针的人,智能指针是不错,可难道一个小小的程序也得引用一个庞大的 boost 库?到时候你的程序代码还不如 hpp 文件多。再说了,你用 C/C++,如果不用指针,你还不如去用 C# 或者 Java 什么的。
Jackxan 2012-12-28
  • 打赏
  • 举报
回复
楼主发的那个是你的原创吗 貌似以前在哪过...
wilsonho66 2012-07-23
  • 打赏
  • 举报
回复
防止内存漏洞
xiaoshu666 2012-07-23
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 的回复:]
引用 19 楼 的回复:
赵老连跟4贴,LZ好好想想吧

好好想想。
[/Quote]
赵老干啥的??有啥神作吗??
chenshuang_com 2012-07-23
  • 打赏
  • 举报
回复
连指针都不会用还搞什么C、C++开发啊,不如去搞java和c#吧!
独自听枫 2012-07-20
  • 打赏
  • 举报
回复
标题不如改成 程序员的危害
Flammable_ice 2012-07-20
  • 打赏
  • 举报
回复
C++Primer 一书中就教导我们最好不要用指针,但是C++又离不开指针哦。
加载更多回复(217)

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧