问题标签 [errata]

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 投票
3 回答
511 浏览

c - 在“关于 size_t 和 ptrdiff_t”中解释这段话

安德烈·卡尔波夫(Andrey Karpov)题为“关于size_tptrdiff_t的博文中,他总结道

正如读者所见,使用 ptrdiff_t 和 size_t 类型为 64 位程序提供了一些优势。但是,它不是用 size_t 替换所有无符号类型的全面解决方案。首先,它不能保证程序在 64 位系统上的正确运行。其次,很可能由于这种替换,会出现新的错误,违反数据格式兼容性等等。您不应该忘记,在此替换之后,程序所需的内存大小也会大大增加。必要内存大小的增加会减慢应用程序的工作,因为缓存将存储更少的正在处理的对象。

我不理解这些说法,也没有在文章中看到它们,

“很有可能因为这个替换,会出现新的错误,违反数据格式兼容性等等。”

这怎么可能,在迁移和类型迁移导致错误之前怎么可能没有错误?目前尚不清楚类型 (size_tptrdiff_t) 何时似乎比它们要替换的类型更具限制性。

您不应该忘记,在此替换之后,程序所需的内存大小也会大大增加。

我不清楚所需的内存大小如何或为什么会“大大”增加或根本增加?我明白,如果它确实如此,安德烈的结论就会随之而来。

0 投票
3 回答
929 浏览

c - 对于遍历数组,我们应该使用 size_t 还是 ptrdiff_t?

在Andrey Karpov 题为“关于的这篇博客文章中,size_tptrdiff_t他展示了一个例子,

但是,我不确定这是否正确,似乎应该是

这个对吗?

我知道我们也应该使用类似的东西memset,但让我们完全避免这种情况。我只问类型

0 投票
8 回答
3534 浏览

c - 数组语法与指针语法和代码生成?

在Richard Reese的《理解和使用 C 指针》一书中,它在第 85 页上说,

生成的代码与生成的vector[i]代码不同*(vector+i)。该符号vector[i]生成从位置向量开始的机器代码,从该位置移动 i位置,并使用其内容。该符号*(vector+i)生成从 location 开始的机器代码vector添加 i到地址,然后使用该地址的内容。虽然结果相同,但生成的机器代码不同。这种差异对大多数程序员来说并不重要。

你可以在这里看到摘录。这段话是什么意思?在什么情况下,任何编译器都会为这两者生成不同的代码?从基地“移动”和“添加”到基地有区别吗?我无法让它在 GCC 上工作——生成不同的机器代码。

0 投票
1 回答
380 浏览

openshift - OpenShift 上的 RHEL Atomic Image:安装安全更新

我正在努力修复我们的应用程序的安全漏洞,该应用程序部署在我们客户的 OpenShift 集群上。

具体来说,我们需要安装这些更新:

我们正在尝试将 RHEL 7 Atomic ( registry.access.redhat.com/rhel7-atomic:latest) 作为新的基础映像,但我仍然找不到正确的命令和配置来应用更新。

以下是构建应用程序 Docker 映像时的示例命令结果:

另一种尝试:

有人可以建议下一步在哪里看吗?谢谢!

最好的问候, Chakrit W.

0 投票
1 回答
86 浏览

c++ - C++ Primer 第 5 版第 16.5 章类模板专业化

我认为这本书在第 711 页有一个错误:

在第 16.2.3 节(第 684 页)中,我们介绍了库remove_reference 类型。该模板通过一系列专业化工作:

...

所有三个变量 ,ab,c都具有类型int

我认为会decltype(i)产生一个普通的intint&因此在b. 对于普通变量类型[1]decltype类型说明符产生普通类型,而对于其他可以用作lvalue的表达式,它将产生和lvalue reference

例子

编译并运行

请告诉我我是对还是错,并在适当的时候解释一下。
谢谢

[1]可能正确的术语是id-expression

0 投票
3 回答
229 浏览

c++ - 在 C++ Primer 第 5 版 shared_ptr 中发现错误

嗨,我正在阅读 C++ 入门第 5 版,我想我在 shared_ptr 部分下发现了一个错误。首先,我正在编写代码和他们给出的解释。然后我会写出我认为是错误的内容以及我认为实际发生的事情。代码如下:

他们给出的解释如下:

在这种情况下,p 和 q 都指向同一个内存。因为它们是彼此独立创建的,所以每个引用计数为 1。当定义 q 的块结束时,q 被销毁。销毁 q 会释放 q 指向的内存。这使得 p 成为一个悬空指针,这意味着当我们尝试使用 p 时发生的事情是未定义的。此外,当 p 被销毁时,指向该内存的指针将被第二次删除。

现在我认为错误是“当定义 q 的块结束时,q 被销毁。销毁 q 释放 q 指向的内存。 ”以及他们给出的为什么 p 是悬空指针的原因是错误的。以下是我为什么 p 是一个悬空指针以及为什么第一个引用的语句是错误的推理。

  1. 当定义 q 的块结束时,q被销毁。q但是没有释放指向的内存q是内置指针而不是shared_ptr。而且除非我们显式地写delete q,否则相应的内存不会被释放。
  2. 现在,在新块中,我们使用 q 创建了一个临时 shared_ptr。但这个暂时是独立的p。所以当这个内部块结束时,临时被破坏,因此内存被释放。但请注意,它p仍然指向已释放的相同内存。所以p现在是一个悬空指针,并且p在语句中使用int foo=*p是未定义的。

我认为这是对为什么 p 是悬空指针的正确解释,也是应该存在的更正。有人可以确认这是正确的还是我做错了什么?