我正在尝试使用“>=”运算符比较两个指针的数值,但不是比较它们,而是向第一个指针添加一些随机值。
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
,因此循环是无限的。程序的行为未定义。
“开始”在结束之后是比较反常的,所以我怀疑这是逻辑上的错误。
关于c++ - 比较两个指针时 ">="运算符的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58021040/