1 strcmp 的读取大小无效
Invalid read size of 1 strcmp
我正在尝试将两个名称字符串与 return 匹配的结构进行比较。我已经使用 gdb 验证了传递给 strcmp() 的两个参数对于 GDB 都是非空的。但是,当我调用 strcmp() 时程序出现段错误。
valgrind 的输出是:
==5563== Invalid read of size 1
==5563== at 0x483EED7: strcmp (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==5563== by 0x10AF1B: cecs_component (cecs_component.c:74)
段错误后 gdb 的输出是:
Program received signal SIGSEGV, Segmentation fault.
__strcmp_avx2 () at ../sysdeps/x86_64/multiarch/strcmp-avx2.S:102
102 ../sysdeps/x86_64/multiarch/strcmp-avx2.S: No such file or directory.
这两个都会让我相信我已经将 NULL 值传递给 strcmp(),但是如果我使用 GDB 检查我在段错误之前立即传递的参数值,它们都会查找有效:
Breakpoint 1, cecs_component (cecs=0x55555555f100, name=0x55555555a5c8 "position") at src/cecs_component.c:74
74 if(strcmp(name, cecs->components[i].name == 0)){
(gdb) p cecs->components[i]
= {data = 0x55555555fdd0, size = 12, key = 128, name = 0x55555555a5c8 "position"}
违规代码段如下:
for(int i = 0; i < cecs->num_components; ++i){
if(strcmp(name, cecs->components[i].name == 0)){
return &cecs->components[i];
}
}
return NULL;
该代码段是 运行 来自 libcheck 单元测试,但是段错误发生在没有将 CK_FORK 环境变量设置为 'no' 的情况下,所以我不相信错误是特定于 libcheck 的。
如有任何帮助,我们将不胜感激
有错字
if(strcmp(name, cecs->components[i].name == 0)){
我想你是说
if(strcmp(name, cecs->components[i].name ) == 0){
我正在尝试将两个名称字符串与 return 匹配的结构进行比较。我已经使用 gdb 验证了传递给 strcmp() 的两个参数对于 GDB 都是非空的。但是,当我调用 strcmp() 时程序出现段错误。
valgrind 的输出是:
==5563== Invalid read of size 1
==5563== at 0x483EED7: strcmp (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==5563== by 0x10AF1B: cecs_component (cecs_component.c:74)
段错误后 gdb 的输出是:
Program received signal SIGSEGV, Segmentation fault.
__strcmp_avx2 () at ../sysdeps/x86_64/multiarch/strcmp-avx2.S:102
102 ../sysdeps/x86_64/multiarch/strcmp-avx2.S: No such file or directory.
这两个都会让我相信我已经将 NULL 值传递给 strcmp(),但是如果我使用 GDB 检查我在段错误之前立即传递的参数值,它们都会查找有效:
Breakpoint 1, cecs_component (cecs=0x55555555f100, name=0x55555555a5c8 "position") at src/cecs_component.c:74
74 if(strcmp(name, cecs->components[i].name == 0)){
(gdb) p cecs->components[i]
= {data = 0x55555555fdd0, size = 12, key = 128, name = 0x55555555a5c8 "position"}
违规代码段如下:
for(int i = 0; i < cecs->num_components; ++i){
if(strcmp(name, cecs->components[i].name == 0)){
return &cecs->components[i];
}
}
return NULL;
该代码段是 运行 来自 libcheck 单元测试,但是段错误发生在没有将 CK_FORK 环境变量设置为 'no' 的情况下,所以我不相信错误是特定于 libcheck 的。
如有任何帮助,我们将不胜感激
有错字
if(strcmp(name, cecs->components[i].name == 0)){
我想你是说
if(strcmp(name, cecs->components[i].name ) == 0){