- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
首先,澄清一下,我不是在谈论解除对无效指针的引用!
考虑以下两个示例。
示例 1
typedef struct { int *p; } T;
T a = { malloc(sizeof(int) };
free(a.p); // a.p is now indeterminate?
T b = a; // Access through a non-character type?
示例 2
void foo(int *p) {}
int *p = malloc(sizeof(int));
free(p); // p is now indeterminate?
foo(p); // Access through a non-character type?
问题
上述任一示例是否会调用未定义的行为?
上下文
这个问题是为了回应 this discussion 而提出的.建议是,例如,指针参数可以通过 x86 段寄存器传递给函数,这可能会导致硬件异常。
从 C99 标准中,我们了解到以下内容(强调我的):
[3.17] indeterminate value - either an unspecified value or a trap representation
然后:
[6.2.4 p2] The value of a pointer becomes indeterminate when the object it points to reaches the end of its lifetime.
然后:
[6.2.6.1 p5] Certain object representations need not represent a value of the object type. If the stored value of an object has such a representation and is read by an lvalue expression that does not have character type, the behavior is undefined. If such a representation is produced by a side effect that modifies all or any part of the object by an lvalue expression that does not have character type, the behavior is undefined. Such a representation is called a trap representation.
综上所述,我们对访问“死”对象的指针有哪些限制?
附录
虽然我在上面引用了 C99 标准,但我很想知道在任何 C++ 标准中行为是否不同。
最佳答案
示例 2 无效。你问题的分析是正确的。
示例 1 有效。结构类型从不持有陷阱表示,即使其成员之一持有。这意味着在陷阱表示会导致问题的系统上,结构分配必须实现为按字节复制,而不是逐成员复制。
6.2.6 Representations of types
6.2.6.1 General
6 [...] The value of a structure or union object is never a t raprepresentation, even though the value of a member of the structure or union object may bea trap representation.
关于c - 什么时候访问指向 "dead"对象的指针有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17024866/
这是一个简单的问题,但它一直困扰着我和我的日志。 我有一个配置: akka { log-dead-letters-during-shutdown = off log-dead-letters
这是 my question here 的一种扩展. 我有 3 个类(class)。 我的主要内容: import java.io.*; public class ConnectionManager
关闭。这个问题是opinion-based .它目前不接受答案。 想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它. 8年前关闭。 Improve this
我知道在Java中的垃圾收集期间,不再有任何引用的对象会被标记为“死亡”,以便垃圾收集器可以将它们从内存中删除。 我的问题是,在垃圾收集阶段,所有“死亡”对象是否都会从内存中删除,或者其中一些对象会存
在那里, 我修改了 Lua 5.0 在线文档中的“perm”示例:http://www.lua.org/pil/9.3.html .我所做的是将 __call() 元方法重新指向 perm() 函数。
我正在开发一个 JavaEE 应用程序,我有以下方法: public String alterar_data_ato_med (int cod_ato, GregorianCalendar nova_
if (myCondition1 && myCondition2 && myCondition3) { ... } 我写了这段代码并运行成功。但我收到了关于 (...) 的一部
“死牛肉”一词是什么意思?我是从一个面试问题中读到的。它与ipv6有关。我以为它可能是一个随机的十六进制数字,例如“快速的棕色狐狸跳过了懒狗”。 我的理解正确吗?还是更有意义? 最佳答案 http:/
“死牛肉”这个词是什么意思?我是从一个面试问题中读到的。和ipv6有关系。我认为它可能是一个随机的十六进制数字,用于示例,例如“敏捷的棕色狐狸跳过了懒狗”。 我的理解正确吗?还是有更重要的意义? 最佳
https://docs.docker.com/engine/reference/commandline/ps/说 status One of created, restarting, running
我有一些正在为类(class)编写的 VHDL 代码。但是,综合工具将 cell3、cell2 和 cell1 识别为“死”代码,并且不会对其进行综合。 我真的不知道是什么导致单元格 3、2、1 在合
自 7 月 17 日起,旧的分享按钮在我管理的所有网站上都停止工作了。 我已经阅读了其他面临类似问题的用户的报告,但我找不到任何官方信息。 您知道是否有任何官方资源可用吗? 最佳答案 更新:截至 20
public class DeadCodeInLuna { public static void main(String[] args) throws IOException {
我有许多 UIView 进入 View ,然后离开 View 并且未被使用。但是,我相信他们中的一些人即使在他们离开后仍会收到通知,这会导致问题。 在 UIView“父”容器上: if(self._c
我正在尝试查找未被任何其他代码调用的私有(private)方法 (CA1811) https://msdn.microsoft.com/en-us/library/ms182264(v=vs.110)
对于那些不确定“受约束的非确定性”是什么意思的人,我推荐 Mark Seeman 的 post . 这个想法的本质是只对影响 SUT 行为的数据具有确定性值的测试。不“相关”的数据在某种程度上可以是“
首先,澄清一下,我不是在谈论解除对无效指针的引用! 考虑以下两个示例。 示例 1 typedef struct { int *p; } T; T a = { malloc(sizeof(int) };
我在我们的代码库中遇到了这个代码片段: function initDoughnutChart(target) { var labels = $(target).data("labels").toS
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我正在使用一个继承的代码库,其中包含数千行注释掉的代码。我知道以前的编码员打算为后代保存他所有的辛勤工作,而不是简单地将其删除,但是:我永远不会阅读它,它只会妨碍您。一个问题示例是,当我对某些代码段执
我是一名优秀的程序员,十分优秀!