Valgrind在运行以下程序时出现inet_pton()的错误:

#include <stdio.h>
#include <arpa/inet.h>

int main()
{
  struct in6_addr addr;
  if (inet_pton(AF_INET6, "fe80::a00:27ff:fe80:e79", &addr) == 1) {
    printf("Valid IP address.\n");
  } else {
    printf("Invalid IP address.\n");
  }

  return 0;
}

输出:Valid IP address.

Valgrind给出以下错误:

==3903== Source and destination overlap in memcpy_chk(0x1ffefffe08, 0x1ffefffe02, 8)
==3903==    at 0x4851042: __memcpy_chk (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==3903==    by 0x49B29CC: memmove (string_fortified.h:36)
==3903==    by 0x49B29CC: inet_pton6 (inet_pton.c:226)
==3903==    by 0x49B29CC: __inet_pton_length (inet_pton.c:56)
==3903==    by 0x49B29CC: inet_pton (inet_pton.c:69)
==3903==    by 0x1091BE: main (in /home/user/inet_pton)

瓦尔格里版本:valgrind-3.21.0

GCC版本:13.2.0-4ubuntu3

可能的原因是什么?

推荐答案

Valgrind中有一个错误:bugs.kde.org/show_bug.cgi?id=402833

您可以使用以下定义 suppress 该错误:

{
   memmove-overlap
   Memcheck:Overlap
   fun:__memcpy_chk
   fun:memmove
}

C++相关问答推荐

ARM上的Modulo Sim Aarch 64(NEON)

是否可以在C中进行D3 D12申请?

字符串令牌化xpath表达式

如何在C中只使用一个带双方括号([i][j])访问语法的malloc来分配动态大小的2d数组?

C中的__attributor__((aligned(4),packed))与 struct 的用法

数据包未从DPDK端口传输到内核端口

为什么输出不是从上到下C

在C++中头文件中声明外部 struct

为什么GDB/MI进程的FIFO循环中有read()阻塞

在 struct 中强制转换空指针

为什么我不能只在内存地址中添加一个int来寻址任何数组?

在句子中转换单词的问题

用C++实现余弦函数

当b是无符号字符时,int a=(b<;<;2)>;>;2;和int a=b&;0x3F;之间有什么区别?

在函数外部使用内联ASM时无法指定操作数

为四维数组中的Dim-1和Dim-3重新分配空间

如何在MSVC中使用intSafe.h函数?

可以对两种 struct 类型中的任何一种进行操作的C函数

C中2个数字的加法 - 简单的人类方法

与 C 相比,C++ 中无副作用的无限循环的好处是 UB?