我正在修复有关android多媒体框架下层c++ lib的错误。当代码运行到以下位置时,系统将崩溃。

if (((*pChar) >= _T('a')) && ((*pChar) <= _T('z'))) {
    nFrameTime++;
}

nFrameTime is int type;
pChar is wchar_t* type;

但是当我将代码修改为:
if (((*pChar) >= _T('a')) || ((*pChar) <= _T('z'))) {
    nFrameTime++;
}

一切都好。我不在乎使用“&&”或“||”,我只想知道为什么会崩溃。有人可以给我一些建议吗?

最佳答案

很有可能pChar没有指向有效数据。那是唯一真正可能导致崩溃的东西(编译器错误除外)。

真正的奥秘在于为什么更改后的版本不会崩溃。

至于我的问题的答案,可能是当您更改代码时,它修改的内容恰好足以使pChar中的垃圾恰好指向有效的内存位置。正如Ben Voigt在评论中指出的那样,另一种可能性是在第二个版本中对检查进行了优化,因为*pChar的所有值都会使其成为true

10-06 02:39