问题标签 [null-pointer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
7 回答
1885 浏览

null - 关于不可为空类型的争论

我不断听到人们谈论不可为空的引用类型如何解决如此多的错误并使编程变得如此容易。甚至 null 的创建者也称其为十亿美元的错误,并且Spec#引入了不可为 null 的类型来解决这个问题。

编辑:忽略我对 Spec# 的评论。我误解了它是如何工作的。

编辑2:我一定是在和错误的人说话,我真的希望有人与之争论:-)


所以我猜,作为少数派,我错了,但我不明白为什么这场辩论有任何价值。我认为 null 是一种查找错误的工具。考虑以下:

砰!访问冲突。有人忘记初始化了c


现在考虑一下:

哎呀。循环被静默地跳过。可能需要一段时间才能找到问题所在。


如果你的类是空的,那么代码无论如何都会失败。为什么不让系统告诉你(尽管有点粗鲁),而不必自己弄清楚呢?

0 投票
8 回答
17425 浏览

c++ - 在 NULL 指针上访问类成员

我正在试验 C++,发现下面的代码很奇怪。

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

我有以下问题

  1. 非虚方法如何say_hi在 NULL 指针上工作?
  2. 对象在哪里foo分配?

有什么想法吗?

0 投票
9 回答
12182 浏览

c++ - 在 C++ 中使用 0L 初始化指针会导致问题吗?

这个问题中,初始化器用于将指针设置为空。而不是使用 value of 的00L。我读过应该完全0使用空指针,因为确切的空指针表示是特定于实现的。

移植时可以使用0L将指针设置为 null 导致问题吗?

0 投票
6 回答
1164 浏览

c - C89:访问冲突读取 0x00(malloc 困难)

我正在 Visual Studio 2010 Ultimate Beta (Win 7) 上开发 C89。我不认为我使用malloc()正确。我是C新手,所以请原谅初学者的问题。

我的程序的目标是计算**argv使用树时单词的出现次数。

hist.c

tree_add.c:

我得到的错误是:

0xC0000005:访问冲突读取位置 0x00000000。

我在网上查了一下,看来这个错误是由于试图访问分配不正确的内存造成的。那么我做错了什么?

更新代码以反映评论。现在我有一个新问题。当value == "x"tree->value == "x"

在调试器中,我看到了tree->valueis 0x00553373 "x" char *,而valueis 0x00553375 "x" char *。最后一位的十六进制值不同。这里有什么问题?我是否错误地检查了字符串相等性?

0 投票
2 回答
16141 浏览

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

考虑以下代码:

我们预计(b)会崩溃,因为空指针没有对应x的成员。在实践中,(a)不会因为this指针从未使用过而崩溃。

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

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

0 投票
4 回答
12730 浏览

c++ - 其中哪一个会创建一个空指针?

该标准说取消引用空指针会导致未定义的行为。但什么是“空指针”?在下面的代码中,我们称之为“空指针”:

我的想法是,空指针的取消引用仅在最后一种情况下发生。我对吗?根据 C++ 标准,编译时空指针和运行时之间有区别吗?

0 投票
4 回答
20917 浏览

iphone - 在未初始化的对象(空指针)上调用方法

  1. 如果你在一个 nil 对象(指针)上调用一个方法(可能是因为有人忘记初始化它),Objective-C 中的正常行为是什么?它不应该产生某种错误(分段错误,空指针异常......)吗?
  2. 如果这是正常行为,有没有办法改变这种行为(通过配置编译器),以便程序在运行时引发某种错误/异常?

为了更清楚我在说什么,这里有一个例子。

有这个类:

使用此实现:

在程序的某个地方我这样做:

0 投票
3 回答
19112 浏览

android - Android - 处理屏幕方向更改上的对话框

我正在覆盖 onCreateDialog 和 onPrepareDialog 方法或 Dialog 类。

我按照 Reto Meier 的专业 Android 应用程序开发书第 5 章中的示例提取了一些 XML 数据,然后使用对话框显示信息。

我基本上完全遵循了它,但更改了变量以适合我自己的 XML 模式,如下所示:



在我尝试更改屏幕方向之前它工作正常,当我这样做时 onPrepareDialog 被调用,但我的所有变量都出现空指针异常。

即使我告诉我的活动忽略清单中的屏幕方向,错误仍然存​​在。

所以我认为书中的例子中遗漏了一些东西,我需要重写另一种方法来保存我的变量吗?

我现在添加了以下内容:



但我仍然收到空指针异常

0 投票
3 回答
4404 浏览

qt - 带有 QObject 的空模式

(C++/Qt) 我有一个指向 QObject 的智能指针。假设是 QWeakPointer。由于某些外部原因(可能在另一个对象中发生的事情或由于某个事件),指向的对象可能会被破坏。因为我有一个智能指针,所以不会有悬空引用,所以没有问题。但我总是要检查指针是否为空。

我正在考虑使用空模式以避免一直检查这一点,但我不确定这对于 QObject 是否可行或方便。这个想法是指针指向对象,如果它被破坏,智能指针会将其指向的对象更改为空对象。这是一个好主意还是我应该忘记它并检查指针是否一直为 NULL?


让我们给你看一个例子。我们有一个工人使用工具来完成工作:

在这种情况下,工具是一个库的公共领域对象,由 Worker 使用。我正在开发这样的库。所以工人正在使用螺丝刀,但它被打破并被摧毁。没问题:

m_tool 为 0,所以它什么也不做。但是我们必须每次都检查它是否不为空。

现在假设我们有一个 NullTool 对象:

当工具被销毁时,我们的指针会很聪明,并且会知道它应该指向一个 NullTool 实例。所以 Worker::work() 可以这样实现:

然后 m_tool->use() 将在什么都不做的 NullTool 上被调用,因此无需检查指针是否为空。

这是一个好主意吗?Qt提供的智能指针类是否有可能,或者我应该继承QWeakPointer?

0 投票
8 回答
190457 浏览

c++ - 删除 NULL 指针是否安全?

删除 NULL 指针是否安全?

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