gpt4 book ai didi

c - strcastr 中的读取大小无效

转载 作者:太空宇宙 更新时间:2023-11-04 03:03:03 25 4
gpt4 key购买 nike

以下代码:

#include <stdlib.h>
#include <string.h>

int main() {
char *s = strdup("keep-alive");
if(strcasestr(s, "close")) {
}
free(s);
return 0;
}

在 Valgrind 中出现以下错误:

==13183== Invalid read of size 8
==13183== at 0x4F53F94: __strcasestr_sse42 (emmintrin.h:685)
==13183== by 0x4005BF: main (in /home/aaron/dev/strtest)
==13183== Address 0x51ce048 is 8 bytes inside a block of size 11 alloc'd
==13183== at 0x4C28F9F: malloc (vg_replace_malloc.c:236)
==13183== by 0x4EB1441: strdup (strdup.c:43)
==13183== by 0x4005A5: main (in /home/aaron/dev/strtest)

有没有人看过这个?使用 gcc 4.6.1,在有和没有优化的情况下都会发生这种情况。

最佳答案

如果这仅发生在 valgrind 中,则不是错误。对于 您的代码 来说,读取超出 malloc 获得的对象末尾的内容将是未定义的行为,但 strcasetr 是“实现”的一部分因此可以使用特定于实现的知识:在这种情况下,只要您不跨越页面边界,过度阅读是绝对安全的。

关于c - strcastr 中的读取大小无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9088933/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com