标签: null-pointer

删除NULL指针是否安全?

删除NULL指针是否安全?

它是一种很好的编码风格吗?

c++ pointers memory-management null-pointer delete-operator

281
推荐指数
5
解决办法
15万
查看次数

我可以使用if(指针)而不是if(指针!= NULL)吗?

检查指针是不是NULL通过简单写入if(pointer)或我必须使用它是否安全if(pointer != NULL)

c++ null pointers if-statement null-pointer

164
推荐指数
6
解决办法
8万
查看次数

何时在null实例上调用成员函数会导致未定义的行为?

请考虑以下代码:

#include <iostream>

struct foo
{
    // (a):
    void bar() { std::cout << "gman was here" << std::endl; }

    // (b):
    void baz() { x = 5; }

    int x;
};

int main()
{
    foo* f = 0;

    f->bar(); // (a)
    f->baz(); // (b)
}
Run Code Online (Sandbox Code Playgroud)

我们期望(b)崩溃,因为x空指针没有相应的成员.在实践中,(a)不会崩溃,因为this从不使用指针.

因为(b)取消引用this指针((*this).x = 5;),并且this为null,程序进入未定义的行为,因为取消引用null总是被称为未定义的行为.

(a)导致未定义的行为吗?如果两个函数(和x)都是静态的呢?

c++ standards-compliance null-pointer undefined-behavior language-lawyer

115
推荐指数
2
解决办法
1万
查看次数

在javax.annotation中找不到@Nullable.*

我想用@Nullable 注释来消除NullPointerExceptions.我在网上找到了一些教程,我注意到这个注释来自包javax.annotation.Nullable; 但是当我导入它时会产生编译错误:无法找到符号

java annotations nullable nullpointerexception null-pointer

102
推荐指数
6
解决办法
10万
查看次数

保证执行memcpy(0,0,0)是否安全?

我不太熟悉C标准,所以请耐心等待.

我想知道,按标准保证memcpy(0,0,0)是否安全.

我能找到的唯一限制是,如果内存区域重叠,那么行为是未定义的......

但我们可以认为这里的内存区域重叠吗?

c memcpy null-pointer language-lawyer

72
推荐指数
2
解决办法
2万
查看次数

Rust的Option类型的开销是多少?

在Rust中,引用永远不能为null,因此如果您实际需要null,例如链接列表,则使用以下Option类型:

struct Element {
    value: i32,
    next: Option<Box<Element>>,
}
Run Code Online (Sandbox Code Playgroud)

与简单指针相比,在内存分配和解除引用步骤方面涉及多少开销?在编译器/运行时中是否存在一些"魔力",使得使用相同的构造或通过将指针包装在向量中,使用自己在非核心库中Option实现成本,或者成本更低?Optionenum

performance null-pointer rust

72
推荐指数
1
解决办法
1万
查看次数

为什么 C 语言中有两种表达 NULL 的方式?

根据 C11 标准的 \xc2\xa76.3.2.3 \xc2\xb63,C 中的空指针常量可以由实现定义为整数常量表达式0或转换为 的此类表达式void *。在 C 语言中,空指针常量由宏定义NULL

\n

我的实现(GCC 9.4.0)NULL通过stddef.h以下方式定义:

\n
#define NULL ((void *)0)\n#define NULL 0\n
Run Code Online (Sandbox Code Playgroud)\n

为什么上述两个表达式在 的上下文中被认为在语义上等效NULL?更具体地说,为什么存在两种而不是一种表达同一概念的方式?

\n

c null null-pointer language-lawyer

69
推荐指数
7
解决办法
8438
查看次数

访问NULL指针上的类成员

我正在尝试使用C++,发现下面的代码非常奇怪.

class Foo{
public:
    virtual void say_virtual_hi(){
        std::cout << "Virtual Hi";
    }

    void say_hi()
    {
        std::cout << "Hi";
    }
};

int main(int argc, char** argv)
{
    Foo* foo = 0;
    foo->say_hi(); // works well
    foo->say_virtual_hi(); // will crash the app
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我知道虚方法调用崩溃,因为它需要vtable查找,并且只能使用有效对象.

我有以下问题

  1. 非虚方法如何处理say_hiNULL指针?
  2. 对象在哪里foo分配?

有什么想法吗?

c++ null virtual null-pointer

48
推荐指数
4
解决办法
2万
查看次数

我们如何检查指针是否为NULL指针?

我一直认为只会if(p != NULL){..}做这项工作.但在阅读Stack Overflow问题后,似乎没有.

那么在吸收了那个说明NULL指针可能具有非零值的问题的所有讨论之后检查NULL指针的规范方法是什么?

c null-pointer

42
推荐指数
5
解决办法
13万
查看次数

什么是void指针,什么是空指针?

所以我正在经历一些面试问题,我遇到了一个关于void和null指针的问题,声称:

没有返回类型的指针称为空指针.它可以是任何类型的数据类型.

这彻底迷惑了我!它似乎无效,根据这个问题,null可以互换使用,我不相信这是正确的.我假设void是一个返回类型,null是一个值.但我只是一个代码新手,我不确定我是对的.

请表达您对空指针是什么以及空指针是什么的看法.我不是在寻找null和void之间的区别.

c++ pointers void-pointers null-pointer

38
推荐指数
5
解决办法
3万
查看次数