【发布时间】:2011-12-10 17:34:12
【问题描述】:
我正在用 C 语言开发一个程序,它使用链表数组(原始哈希表)作为数据类型来表示某些日期信息。该数组有十二个元素对应一年中的月份,每个月都有一个包含数据节点的链表。
我开发了使用这种数据类型的模块,它运行良好。后来我发现我正在访问超出范围的数组元素(例如,通过索引 12 而不是 11 访问第 12 个元素)。但该程序始终如一地运行,没有发生任何事故。我从未收到分段错误。我已经更正了编码错误。谁能解释为什么访问越界元素不会导致段错误?
这不是第一次发生。我创建了一个动态分配的多维数组,为了测试,我尝试访问越界元素。该程序运行良好,产生了准确的结果,并且在大多数情况下都没有出现段错误。唯一一次我实现了,我不得不尝试访问大量越界的元素。
(这些程序目前是用于测试的 Windows 控制台应用程序。我正在使用 MinGW 进行编译。如果有帮助,我可以包含代码。)
【问题讨论】:
-
stackoverflow.com/questions/671703/… 有一些关于这种 UB 的好帖子
标签: c memory-management dynamic-memory-allocation