标签: null-pointer

cpp, "\0" == NULL 返回 false?如何判断它是否为 null ptr?

我得到了这些结果。我究竟做错了什么?

const char *c = "\0";
cout << (c == NULL); // false
cout << (c == nullptr); //false
Run Code Online (Sandbox Code Playgroud)

c++ string-literals null-pointer

-1
推荐指数
1
解决办法
91
查看次数

指针默认初始化值不是NULL?

默认情况下,我们如何知道指针未初始化为NULL?有一个类似的问题针对为什么默认情况下没有用NULL初始化指针? 只是为了检查,这是一个非常简单的代码,只是为了查看默认情况下指针是否设置为NULL.

#include <iostream>
using namespace std;
int main()
{
    int* x;
    if(!x)
        cout << "nullptr" << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在输出中,我收到了nullptr消息.如果有人能澄清这一点我感激不尽.

c++ pointers null-pointer

-2
推荐指数
1
解决办法
201
查看次数

在此函数中有缺陷,因为取消引用null无效,所以我想更改代码

long cread(long *xp) {
  return (xp? *xp : 0);
}
Run Code Online (Sandbox Code Playgroud)

它无效,因为它可能尝试从空地址读取

所以解决方案建议使用此代码

long cread_alt(long *xp){
  long tem = 0;
  if(*xp > 0){
   tem = *xp;
  }
  return tem;
Run Code Online (Sandbox Code Playgroud)

但我认为它也无效,因为if(*xp > 0)xp指向空地址时仍然有缺陷.

所以我想到了这段代码

 long cread_alt2(long *xp){
     long tem = 0;
     if(xp != NULL){
        tem = *xp;
     }
     return tem;
 }
Run Code Online (Sandbox Code Playgroud)

我有这个吗?

c++ pointers null-pointer dereference

-3
推荐指数
1
解决办法
140
查看次数

是否在C++中删除空指针被认为是未定义的行为?

考虑以下代码:

int main() {
  int *i = nullptr;
  delete i;
}
Run Code Online (Sandbox Code Playgroud)

问题:

  1. 删除空指针是否被视为未定义的行为?
  2. 在C++ 11或C++ 14中有什么变化吗?

c++ null-pointer undefined-behavior c++11 c++14

-4
推荐指数
1
解决办法
511
查看次数