地址 0x93d1e2c 是分配大小为 2,048 的块之后的 12 个字节
Address 0x93d1e2c is 12 bytes after a block of size 2,048 alloc'd
我在我的代码上 运行 valgrind,看到两个错误。
地址 0x93d1e2c 是分配大小为 2,048 的块后的 12 个字节
我 运行 通过所有讨论和他们到处都提到 "Address xyz is "0" 字节在大小为 <> 的块之后,已分配"。当有人分配 X 字节并将其类型转换为大小为 Y 字节且 Y > X 的内容时,似乎会发生这种情况。
那么当它说“一个块后 12 个字节”而不是“一个块后 0 个字节”是什么意思?有人可以帮忙吗?
谢谢,
尼尔
这意味着 Valgrind 检测到您在程序中分配(通过 malloc()
或类似方式)的一个内存块,并且该程序试图访问该块之后 12 个字节的内存地址。
简而言之,这是一个数组越界错误,您试图在实际数组数据之后访问数据。
在下面一行之后,您应该会看到一个调用堆栈,它大致指示了程序中发生无效访问的位置:
Address 0x93d1e2c is 12 bytes after a block of size 2,048 alloc'd
// Details of the callstack should be here
/* Details of the allocation of 2048 bytes should also
be present (separately) in Valgrind's output */
我在我的代码上 运行 valgrind,看到两个错误。
地址 0x93d1e2c 是分配大小为 2,048 的块后的 12 个字节
我 运行 通过所有讨论和他们到处都提到 "Address xyz is "0" 字节在大小为 <> 的块之后,已分配"。当有人分配 X 字节并将其类型转换为大小为 Y 字节且 Y > X 的内容时,似乎会发生这种情况。
那么当它说“一个块后 12 个字节”而不是“一个块后 0 个字节”是什么意思?有人可以帮忙吗?
谢谢, 尼尔
这意味着 Valgrind 检测到您在程序中分配(通过 malloc()
或类似方式)的一个内存块,并且该程序试图访问该块之后 12 个字节的内存地址。
简而言之,这是一个数组越界错误,您试图在实际数组数据之后访问数据。
在下面一行之后,您应该会看到一个调用堆栈,它大致指示了程序中发生无效访问的位置:
Address 0x93d1e2c is 12 bytes after a block of size 2,048 alloc'd
// Details of the callstack should be here
/* Details of the allocation of 2048 bytes should also
be present (separately) in Valgrind's output */