仅仅在C中的数组外阅读是危险的吗

  • 本文关键字:危险 数组 c arrays
  • 更新时间 :
  • 英文 :


我看过几篇关于在数组边界外写入的危险的文章。我想知道,在他们之外阅读有什么问题吗?我这样做的原因如下:

我在随机生成的数组中有命令和数据,但有时命令需要不确定的数据量。我需要在每个命令的子例程中进行检查,这样就不会从字符串外部读取数据,还是可以暂时从数组外部读取,然后再重新分配?

根据(草案)C标准(ISO 9899:201x)附录J,未定义行为包括:

--将指针添加到数组中或刚好添加到数组之外对象和整数类型生成的结果刚好指向数组对象,用作一元*运算符的操作数评估(6.5.6)。

--数组下标超出范围,即使对象明显可通过给定的下标访问

在C中,这个表达式a[2]等价于*(a+2)

有时命令需要不确定数量的数据

最初,需要根据最佳猜测(使用malloc或calloc)分配一定数量的内存。

我可以暂时读取阵列外的垃圾,然后重新分配吗

随着程序的进行,以前关于数据量的不确定性可能会让位于存储新数据需要多少新内存的确定性。

然后,需要使用新的可用信息调用realloc。但是程序总是需要检查alloc例程的返回值,并对给定的内存块的有效范围进行正确的核算,并且应该保持在这些范围内。

否则将导致未定义的行为

更好的是,您可以使用c++标准库为您进行内存管理。标准库提供的功能根据需要分配和扩展内存,这样您就不必这么做了。

最新更新