问题标签 [undefined-behavior]

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 投票
2 回答
542 浏览

c++ - 以下代码是否调用 UB?

以下代码是否调用 UB ?

0 投票
7 回答
4496 浏览

c++ - 我可以使用 C++ 中的内置类型安全地新建 [],然后转换指针,然后删除 [] 吗?

在我的代码中,我实际上有以下内容:

有问题的类型都是内置的,因此它们具有微不足道的析构函数。在 VC++ 中,上面的代码可以正常工作 -new[]只是分配内存,然后delete[]释放它。

在 C++ 中可以接受吗?它是未定义的行为吗?

0 投票
1 回答
173 浏览

c++ - 是否允许 null terminate() 处理程序?

在 VC++7 中,如果我执行以下操作:

该程序的行为就像abort()直接调用一样,这正是默认terminate()处理程序所做的。

如果我省略该set_terminate( 0 );语句,我的终止处理程序将被调用。因此调用set_terminate( 0 )似乎具有将terminate()处理程序重置为默认值的效果。

这种行为是否仅适用于 VC++7?如果我调用其他一些实现,程序会不会遇到未定义的行为set_terminate( 0 )

0 投票
19 回答
1944 浏览

c++ - 如何向无所不知的新手解释未定义的行为?

在少数情况下,C++ 标准将其视为未定义的行为。例如,如果我分配 with new[],然后尝试使用delete(not delete[]) 释放未定义的行为 -任何事情都可能发生- 它可能会起作用,它可能会严重崩溃,它可能会默默地破坏某些东西并造成定时问题。

解释这个任何事情都可能发生在新手身上是很成问题的。他们开始“证明”“这有效”(因为它确实适用于他们使用的 C++ 实现)并询问“这可能有什么问题”?我能给出什么简洁的解释来激励他们不写这样的代码?

0 投票
1 回答
2671 浏览

.net - 使用 ReadToDescendant 和/或 ReadElementContentAsObject 更正 XmlReader 问题

我正在研究通常非常好的开源项目Excel Data Reader中的一个神秘错误。它正在跳过从我的特定 OpenXML .xlsx 电子表格中读取的值。

问题出现在ReadSheetRow 方法中(下面的演示代码)。源 XML 由 Excel 保存并且不包含出现奇怪行为的空格。然而,已经用空格重新格式化的 XML(例如在 Visual Studio 中转到编辑、高级、格式化文档)工作得很好!

带空格的测试数据:

没有空格的测试数据:

演示问题的示例代码:

请注意,A之后输出_xmlReader.Read()B之后输出ReadToDescendantC之后输出ReadElementContentAsObject

带有空格的 XML 的测试结果:

没有空格的 XML 的测试结果:

模式更改表明XmlReader 移动到ReadElementContentAsObject的位置或可能的位置存在问题。ReadToDescendant

有谁知道这里可能会发生什么?

0 投票
5 回答
1697 浏览

c++ - 如果更改 const 对象是未定义的行为,那么构造函数和析构函数如何通过写访问进行操作?

C++ 标准说修改最初声明的对象const是未定义的行为。但是构造函数和析构函数是如何操作的呢?

我的意思是这里的构造函数和析构函数与调用代码做的事情完全相同,但是它们被允许更改对象并且不允许调用者——他遇到了未定义的行为。

它应该如何在实现下并根据标准工作?

0 投票
1 回答
3495 浏览

c++ - 通过引用抛出非常量临时变量

通过非常量引用在try-block中抛出构建在堆栈上的对象,捕获并修改它,然后通过引用另一个catch块抛出它有什么问题吗?

下面是我所指内容的简短示例。

这是否可能导致 e.what 包含垃圾,但 e.where 保持完整?例如:
e.where is "123"
e.get() 返回大量垃圾数据,直到碰巧碰到一个空字节。

0 投票
6 回答
885 浏览

c - 在C中反转字符串

我知道这已经被问了数千次,但我只是在我的代码中找不到错误。有人可以指出我做错了什么吗?

0 投票
2 回答
168 浏览

c++ - 以下代码是否调用未定义行为?

0 投票
3 回答
618 浏览

c - 赋值评估的顺序(我发现我的第一个编译器错误了吗?)

这段代码有一个有趣的错误:

对于大多数编译器,上述代码导致将相应数组中所有结构的“值”字段设置为 1。但是,对于一个特定的编译器(我们称之为 xcc),struct_array1 中的结构未正确初始化。所有结构的“值”字段都设置为 0,这让我很惊讶。

以下代码片段在所有编译器上都按预期工作:

现在,我完全离开这里了吗,还是有问题的编译器“xcc”只是显示了一个错误?

我在第一个代码片段中找不到任何显示特定于实现的行为的东西;据我了解,后缀递增应该优先于分配,并且分配应该从右到左进行评估。第一个代码片段应该没有什么奇怪的,除了它有点不可读。