Tag: 空指针

什么是Rust的选项types的开销?

在Rust中,指针永远不能为null,所以如果实际上需要null的话,比如链表,可以使用Optiontypes: struct element { value: i32, next: Option<Box<element>>, } 这涉及多less开销(就内存分配而言,以及与简单指针相比,取消引用的步骤)? 在编译器/运行库中是否有一些“魔术”,使得Option可以免费使用,或者比在非核心类库中使用Option实现成本更低(使用相同的enum结构,或者将指针包装在向量)?

什么是C ++中的void指针?

可能重复: 什么是空指针,什么是空指针? 我经常看到类似下面这样的代码: void * foo(int bar); 这是什么意思? 这是否意味着它可以返回任何东西 ? 这是类似于C#中的dynamic或object吗?

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

我对C标准不太了解,请耐心等待。 我想知道是否可以保证memcpy(0,0,0)是安全的。 唯一的限制,我可以find的是,如果内存区域重叠,那么行为是未定义的… 但是我们可以认为这里的内存区域是重叠的吗?

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

if(pointer)或if(pointer != NULL) ,检查一个指针不是NULL是否安全?

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

所以我遇到了一些面试问题,我遇到了这个问题 这个问题的答案彻底让我困惑! 根据这个问题,似乎无效和空可以交替使用,我不相信这是正确的。 我认为无效是一个返回types,空值是一个值。 但是我只是一个代码新手,我不知道我是否正确。 因此,所有的专家在那里..如果你可以摆脱一些光,这将是非常有益的! 🙂 请expression您的意见,什么是空指针和空指针是什么。 不寻找无效之间的区别。 也请validation问题的答案,并告诉我,如果这是正确的…谢谢

访问一个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; } 我知道虚拟方法调用崩溃,因为它需要一个vtable查找,只能使用有效的对象。 我有以下问题 非虚拟方法say_hi如何在NULL指针上工作? foo对象在哪里分配? 有什么想法吗?

什么时候调用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) } 我们期望(b)崩溃,因为空指针没有对应的成员x 。 在实践中, (a)不会因为this指针从未被使用而崩溃。 因为(b)取消引用this指针( (*this).x = 5; ),并且this为null,所以程序进入未定义的行为,因为dereferencing的null总是被认为是未定义的行为。 (a)是否会导致未定义的行为? […]

删除空指针是否安全?

删除空指针是否安全? 这是一个很好的编码风格?