我调试了一个定义指针数组的示例程序:
int a = 1, b = 2, c = 3;
int* t[] = {&a, &b, &c};
我想在调试期间将数组中的所有指针设置为NULL。当我使用以下命令时:
call memset(t, 0x0, sizeof(int*)*3)
我会得到以下输出:
$3 = (void *(*)(void *, int, size_t)) 0x7ffff77e7e10 <__memset_avx2_unaligned_erms>
当我打印数组时指针不设置为NULL:
(gdb) print t
$4 = {0x7fffffffddc0, 0x7fffffffddc4, 0x7fffffffddc8}
有什么不对吗?
2条答案
按热度按时间jbose2ul1#
我会得到以下输出:
你得到这个输出是因为在你的GLIBC版本中
memset
是GNU indirect function,它不写任何内存,它返回实际实现的地址(在你的例子中是__memset_avx2_unaligned_erms
)。您可以验证情况是否如此:
要实际设置内存,需要调用 implementation 函数,如
__memset_avx2_unaligned_erms
。P.S.对于
memset
的3个指针数组,简单地分别设置每个指针会更容易:(gdb) t[0]=0
。但是我假设你实际上想归零的对象更大。为了便于调试,您可以编写一个简单的
local_memset()
并调用 it。s2j5cfk02#
根据Employed Russian的答案,插入
()
并使用这是因为
memset()
返回您实际要调用的函数。