比较两个指针时">="运算符的奇怪行为
Weird behavior of ">=" operator when comparing two pointers
我正在尝试使用">="运算符比较两个指针的数值,但它没有比较它们,而是在第一个指针中添加了一些随机值。
void obj::Loader::calculate_size(const char* start_ptr, const char* end_ptr, atomic_long& v, atomic_long& vt, atomic_long& vn, atomic_long& f) {
while (start_ptr >= end_ptr) {
if (*start_ptr == 'v') {
start_ptr++;
if (*start_ptr == ' ') {
v++;
start_ptr += 27;
}
else if (*start_ptr == 't') {
vt++;
start_ptr += 18;
}
else if (*start_ptr == 'n') {
vn++;
start_ptr += 21;
}
}
else if (*start_ptr == 'f') {
start_ptr++;
if (*start_ptr == ' ') {
f += 3;
start_ptr += 17;
}
}
start_ptr++;
}
}
此函数应该在内存映射文件的一部分(从"start_ptr"到"end_ptr"(中计算这些字母的所有实例。知道文件某些部分的最小长度后,我决定有时将"start_ptr"增加不止一个,但这样做我不能依靠"!="运算符来停止循环。
问题是">="并没有像在整数上那样真正工作,它只会使整个事情崩溃。还有其他选择吗?
给定循环条件是start_ptr >= end_ptr
,并且考虑到循环体只会递增start_ptr
,如果循环被进入,那么start_ptr
永远不会小于end_ptr
,因此循环是无限的。程序的行为是未定义的。
"开始"在结束之后是相当不寻常的,所以我怀疑这是逻辑上的错误。
对我来说,这种比较似乎是错误的:而不是
while (start_ptr >= end_ptr) {
// [...]
start_ptr++;
}
我希望自然条件是:
while (start_ptr < end_ptr) {
// [...]
start_ptr++;
}
我怀疑程序中的崩溃不是直接由于指针比较造成的,而是未进入循环时发生意外情况的副作用。
相关文章:
- 为什么比较运算符如此快速
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 使用C++中的模板和运算符重载执行矩阵运算
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 增量运算符与后缀混淆
- 一个关于在C++中重载布尔运算符的问题
- 运算符C++ "delete []"仅删除 2 个前值
- 模板类无法识别友元运算符
- 我可以使用条件运算符初始化C风格的字符串文字吗
- 关闭||运算符优化
- 通过继承类使用来自不同命名空间的运算符
- C++Cast运算符过载
- 如何使用AngelScript注册SFML Vector2运算符
- 重载元组索引运算符-C++
- 如何使用重载的相等(==)运算符向测试用例添加描述
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 布尔比较运算符是如何在C++中工作的
- 重载运算符new[]的行为取决于析构函数
- 是否需要使用 - &gt;运算符在C 中调用成员函数时