即使两个字符串都正常,strcmp 也会崩溃

strcmp crashes even though both strings are sane

我有一个奇怪的问题,我的程序在 strcmp 崩溃。

根据 gdb 核心分析,我发现被检查的两个字符串都是正常的,这意味着它们的指针不是 NULL,并且它们包含有限的空终止值。

但是其中一个字符串是垃圾(不是变量要包含的字符串)

撇开它是垃圾这一事实不谈,我真的很想知道为什么 strcmp 会因为 2 个正常的字符串而崩溃?这可能是什么原因?

提前致谢!

编辑:

一个例子,

a = strcmp(b,c);
(gdb) p b
 = 0x7f58d3a36b89 "H50uRH5}00\a017A6"
(gdb) p c
 = 0x2041e48 "MAIN"

bc 的值似乎 不错,但由于优化,特别是围绕 strcmp() 等功能可能会经历密集的宏扩展,调试器可能无法获得实际值。

问题可能很容易在源代码中发现,您应该 post 有问题的函数的源代码。

gdb 为变量 b 打印的值 0x7f58d3a36b89 大得惊人!您可以尝试以这种方式修改您的代码:

static char bb = *b;
static char cc = *c;
a = strcmp(b, c);

strcmp() 之前强制访问 bc 可能会导致崩溃并让您验证 b 是否确实是 gdb打印出来。