使指针类型围绕其最大值
Do pointer types wrap around their maximum value?
考虑一个不是 nullptr
的指针char* p
,loop
while(++p);
行为定义良好还是未定义?换句话说,当达到最大分配内存(可能是2^32或2^64)时,指针最终会变为0,或者这只是ub?
std :: numeric_limits(如预期的)不是专门用于指针类型的。
简短答案:按规格,它是未定义的行为。执行任何导致未分配内存的指针算术超过一个分配项目的地址(请参阅GCC Doc中的结尾章节的一章)是未定义的行为。
看看为什么,让我们查看标准:
sec 3.7.4.3.2在C 11中的标准标准在所有"安全衍生的指针"类型上列举。SEC 3.7.4.3.2中的大多数项目描述了合法获取对象的参考的方法。假设指针是指分配的内存,3.7.4.3.2简单地说:
仅在具有对象指针类型的情况下,指针值是安全衍生的指针,它是一个动态对象,并且是以下内容之一:
- 使用安全衍生的指针值定义明确的指针算术(5.7)的结果;
秒5.7.4状态:
出于这些运算符的目的,指向非阵列对象的指针与指向长度为"长度"数组的第一个元素的指针相同。
最后,第5.7.5:
如果指针操作数和结果指向同一数组对象的元素,或一个超过数组对象的最后一个元素,则评估不会产生溢出;否则,行为是未定义的。
从规范的角度来看:是ub。
从A 中,什么意愿的观点,是的,它最终将在大多数环境中缠绕到零,尤其是对于普通的环境。64位系统。
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 使用指针从C++中的数组中获取最大值
- 如何将这个C++哈希表转换为动态扩展和收缩,而不是使用硬设置的最大值
- 如何创建一个函数来计算并返回平均值、最大值和最小值
- 在二维数组中查找最小值和最大值?
- 整数溢出,最大值为 pow(10,19)
- 以C++递归方式查找向量中的最大值
- C++ - 如何在结构向量中找到结构体一个成员的最大值?
- 查找数组中第一个最小值和最后一个最大值元素之间的算术平均值
- C++ 函数,用于查找传入的 N 个数字的平均值、总和、最小值和最大值
- 我的 If Else 语句无法在向量 (C++) 中提供最大值
- 如何使用可变参数模板类使用模板元编程获得最大值
- C++不同的最小最大值实现
- Vec3b:r/g/b 颜色的最大值为 254,而不是 255
- CUDA - 将 float3 数组的 (x,y,z) 分量的最小值/最大值分开?
- 如何返回指向链接列表中最大值的指针
- 如何使用函数参数中的int指针来获取2d数组中最大值的索引并返回指针
- 使用动态内存分配和指针查找最大值、最小值和平均值
- 使指针类型围绕其最大值
- 函数,它接受三个参数:指向双数组的指针、指向最小值的指针和指向最大值元素的指针