请帮忙看看这三行代码有无问题?谢谢

weixin_41543176 2017-12-26 04:40:51
char * pl; pl=new char[10]; if(pl==0) return false; 这几行有问题吗?谢谢
...全文
854 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
宁南学者 2018-01-25
  • 打赏
  • 举报
回复
或者捕获 分配失败的异常: try { p=new ; } catch(std::bad_alloc &e ) { 打印出异常 情况 }
weixin_41543176 2018-01-25
  • 打赏
  • 举报
回复
引用 16楼tjroamer 的回复:
用new会调用类的构造器函数,如果分配内存失败会抛出异常,那么你的后面的判断语句不会执行。如果分配正确,你的判断的条件总是true。所以同上面的,你的代码本身语法没有问题,但是是多余的。
如果new抛出异常,现在的代码不处理异常,是不是意味着new失败之后,后续的代码不会执行,原因是程序异常退出了?谢谢
weixin_41543176 2018-01-25
  • 打赏
  • 举报
回复
引用 20楼liweiiewil 的回复:
似乎楼上只有几个人说对了。C++中使用new分配内存,失败时不会返回NULL,会抛出异常。因此楼主的代码中判断null的部分根本不会被调用。如果希望改变new的缺省行为,让它在分配失败时返回null ,就要使用no throw new,即 西瓜的忧伤 所使用的 new(std::nothrow) 方法.
如果new抛出异常,现在的代码不处理异常,是不是意味着new失败之后,后续的代码不会执行,原因是程序异常退出了?谢谢
lwg0869 2018-01-25
  • 打赏
  • 举报
回复
char * pl = null; 初始化初始值
super_admi 2018-01-15
  • 打赏
  • 举报
回复
看你这意思,还是用malloc吧。
liweiiewil 2018-01-15
  • 打赏
  • 举报
回复
似乎楼上只有几个人说对了。C++中使用new分配内存,失败时不会返回NULL,会抛出异常。因此楼主的代码中判断null的部分根本不会被调用。如果希望改变new的缺省行为,让它在分配失败时返回null ,就要使用no throw new,即 西瓜的忧伤 所使用的 new(std::nothrow) 方法.
西瓜的忧伤 2018-01-09
  • 打赏
  • 举报
回复
可以改成pl=new(std::nothrow) char[10];这样后面的代码就可以了。我印象中用if(pl==0)这种方式判断兼容性更好一些,因为之前做跨平台的时候,用gcc编译某个库遇到NULL定义的问题
  • 打赏
  • 举报
回复
楼上的各位基本上讲全面了。
待续_1006 2018-01-08
  • 打赏
  • 举报
回复
tjroamer 2018-01-06
  • 打赏
  • 举报
回复
用new会调用类的构造器函数,如果分配内存失败会抛出异常,那么你的后面的判断语句不会执行。如果分配正确,你的判断的条件总是true。所以同上面的,你的代码本身语法没有问题,但是是多余的。
陪妳看星星 2018-01-05
  • 打赏
  • 举报
回复
没有delete语句
热血打工人 2018-01-05
  • 打赏
  • 举报
回复
如果指针的话,pl==NULL好点
boot_black 2018-01-04
  • 打赏
  • 举报
回复
同求,难道说,在c++中不需要显示判断new返回的指针是否为空吗?恳请指教
大风哉 2018-01-04
  • 打赏
  • 举报
回复
我觉得对于还不是很熟练C++的人来说,没必要在这些问题上花费精力,虽然研究透也是值得的,但是把精力花在其他用得多但更容易出错的地方上更能明白C++语言特点和编译器机制。 像这类问题,规范书写即可。如:指针初始化时赋初值;和指针对比时用NULL等。这些是我的建议。
yshuise 2018-01-04
  • 打赏
  • 举报
回复
有问题,new 抛出异常,malloc 才是=0
  • 打赏
  • 举报
回复
if(NULL == p) { free(p); return false; }
IT小浪 2018-01-02
  • 打赏
  • 举报
回复
这么写有啥用
AlbertS 2018-01-02
  • 打赏
  • 举报
回复
从语法上说没有什么问题,如果改成pl==NULL更加明确一点
zyu00 2018-01-02
  • 打赏
  • 举报
回复
这么问是出现什么问题了吗
weixin_41543176 2017-12-26
  • 打赏
  • 举报
回复
引用 5楼bravery36 的回复:
理论上来讲是废代码, new 失败时默认throw excetion, 除非显示指定nothrow.
更晕了
加载更多回复(5)

64,654

社区成员

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

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