C 这个gdb错误意味着什么?I';我在打印了一行之后就得到了这个,在它使用strlen之前我还有其他代码

C 这个gdb错误意味着什么?I';我在打印了一行之后就得到了这个,在它使用strlen之前我还有其他代码,c,C,程序接收信号SIGSEGV,分段故障。 __strlen_sse2_pminub()位于../sysdeps/x86_64/multiarch/strlen-sse2-pminub.S:38 38 movdqu(%rdi),%xmm1问题中没有太多信息,但是strlen(或任何其他str*函数)的绝大多数问题都归结为字符串没有以\0字符(a)结尾这一事实。这可能会导致函数从字符串末尾(您认为是)运行,并最终访问不允许访问的内存 例如: char buff[] = { 'a', 'b' }; in

程序接收信号SIGSEGV,分段故障。 __strlen_sse2_pminub()位于../sysdeps/x86_64/multiarch/strlen-sse2-pminub.S:38
38 movdqu(%rdi),%xmm1

问题中没有太多信息,但是
strlen
(或任何其他
str*
函数)的绝大多数问题都归结为字符串没有以
\0
字符(a)结尾这一事实。这可能会导致函数从字符串末尾(您认为是)运行,并最终访问不允许访问的内存

例如:

char buff[] = { 'a', 'b' };
int x = strlen(buff);
可能会导致问题,因为无法保证在该阵列之后的某个位置会有终止符

您需要做的是查看这个字符串的构造方式,并找出它没有终止符的原因



(a) 这里真正的问题是它实际上不是一个字符串。字符串定义为以
\0
结尾的字符序列。如果没有终止符,则它是一个字符数组而不是字符串,因此不应将其视为后者。

在没有看到相关代码的情况下,我们无法告诉您任何有用的信息,但可能的原因是:

  • 您向strlen传递了无效的指针值
  • 字符串没有正确终止,您正在进入不属于自己的内存

因此,请仔细检查特定的
strlen
调用,并确保参数正确。

这表示访问了无效内存。如果不看完整的代码示例,我们就不能说更多了。因此,请提供一份报告。