【发布时间】:2013-10-02 05:05:56
【问题描述】:
即使在较新的 C++ 代码中,我也经常看到使用普通指针算法的数组迭代。我想知道它们到底有多安全,以及使用它们是否是个好主意。考虑一下这个 sn-p(如果你用 calloc 代替 new,它也可以在 C 中编译):
int8_t *buffer = new int8_t[16];
for (int8_t *p = buffer; p < buffer + 16; p++) {
...
}
当buffer发生分配到地址0xFFFFFFF0(在32位地址空间中)或@时,这种迭代不会导致溢出和循环被完全跳过吗? 987654326@(64 位)?
据我所知,这将是一个非常不走运但仍有可能发生的情况。
【问题讨论】:
-
是的,在这种情况下可能会导致溢出。但无论如何,没有一个健全的操作系统会为你在这些地址映射内存。
-
是指针溢出定义的行为吗?
-
@JoachimPileborg 对此有保证吗?
-
我会使用直接不等式而不是“小于”。 IE。
p != (buffer + 16)对于您正在做的事情是可以接受的。 -
@Dave 因为 0xFFFFFFF0 == 0x0 在你的装备上?
标签: c++ c iteration pointer-arithmetic