我正在尝试使用“> =”运算符比较两个指针的数值,但没有比较它们,而是在第一个数值上添加了一些随机值。
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”增加一个以上,但是这样做不能依靠“!=“运算符来停止循环。
问题是“> =”并不能像整数一样真正起作用,只会使整个事情崩溃。有其他选择吗?
答案 0 :(得分:2)
鉴于循环条件为start_ptr >= end_ptr
,并考虑到循环主体仅递增start_ptr
,如果曾经循环,则start_ptr
永远不会小于{{ 1}},因此循环是无限的。该程序的行为是不确定的。
“开始”在结束之后是相当不常规的,因此我怀疑这是逻辑上的错误。
答案 1 :(得分:1)
这个比较对我来说似乎是错误的:而不是
const includedStates = ['NJ', 'NY'];
const withMap = () => includedStates.reduce((result, item) => ({
...result,
[item]: {
fill: 'red',
clickHandler: (event) => console.log(event.target.dataset.name)
}
}), {});
console.log('withMap =>', withMap());
我希望自然条件是
while (start_ptr >= end_ptr) {
// [...]
start_ptr++;
}
我怀疑程序中的崩溃不是直接由于指针比较引起的,而是由于未进入循环而发生的意外情况的副作用。