【问题标题】:Derefering NULL pointer c++取消引用 NULL 指针 c++
【发布时间】:2016-09-30 14:01:45
【问题描述】:

我收到警告:在第 2、4 行取消引用 NULL 指针 'ch'

我不明白为什么。有人可以帮帮我吗?

char *my_alloc(size_t size) {
   char *ch  = (char *)malloc(size);
   //FIXED: If malloc fails -> exit program
   if(*ch == NULL){
       exit(0);
   }
   return ch;
}

【问题讨论】:

  • NULL 在 c++ 中已弃用,请改用 nullptr。在 c++ 中也应该使用 new 而不是 malloc。并且程序分配和返回指针应该返回智能指针。

标签: c++ pointers nullpointerexception malloc dereference


【解决方案1】:

if(ch == NULL) 是你所需要的

您在 if 内的代码 *ch 中取消引用 ch


ch == NULL检查ch是否为NULL

*ch == NULL检查ch指向的item是否为NULL

【讨论】:

  • 我认为你得到的是exception,而不是warning
  • 谢谢。你能解释一下为什么吗?
  • 如果你问我为什么我认为你得到一个 exception :编译器不会知道 ch 是否为空。
【解决方案2】:

对于 c++(您在问题中使用的报告),答案是

char *ch  = new char[size];

在某个时间点后跟delete[] ch

然后你不需要检查结果是否为空,如果失败就会抛出。

【讨论】:

    猜你喜欢
    • 2020-03-17
    • 2019-05-20
    • 1970-01-01
    • 1970-01-01
    • 2011-02-13
    • 2011-06-17
    • 2020-07-14
    • 2017-04-17
    相关资源
    最近更新 更多