C valgrind是否通过驱动程序跟踪内存初始化?

C valgrind是否通过驱动程序跟踪内存初始化?,c,linux,driver,valgrind,initialization,C,Linux,Driver,Valgrind,Initialization,valgrind报告的未初始化内存错误如下: unsigned char buf[100]; struct driver_command cmd; cmd.len = sizeof(buf); cmd.buf = buf; ioctl(my_driver_fd, READ, &cmd); for(i = 0; i < sizeof(buf); i++) { foo(buf[i]); /* <<--- uninit use error from valgrind

valgrind报告的未初始化内存错误如下:

unsigned char buf[100];
struct driver_command cmd;
cmd.len = sizeof(buf);
cmd.buf = buf;
ioctl(my_driver_fd, READ, &cmd);

for(i = 0; i < sizeof(buf); i++)
{
    foo(buf[i]); /* <<--- uninit use error from valgrind */
}
无符号字符buf[100];
结构驱动程序命令cmd;
cmd.len=sizeof(buf);
cmd.buf=buf;
ioctl(我的驱动程序fd、READ和cmd);
对于(i=0;ifoo(buf[i])显然,Valgrind无法将执行跟踪到内核,但它确实知道大多数系统调用的可见语义。但是,
ioctl
太不可预测了。如果您对驱动程序进行了编码,使其成为一个
read
调用,那么它会正确执行。无论如何,这是更好的做法。

谢谢Zack,这就是我所想的代码的上下文稍微多了一点,read()就没什么意义了。(虽然它不是我的驱动程序,我也不能真正更改它。)我想说的是,你可以包含
memcheck.h
,然后使用
VALGRIND\u make\u MEM\u DEFINED
而不是
memset
。这样会更快。除非ioctl做memset(或类似)valgrind在此报告正确。@ezpz:驱动程序应该将100字节写入buf…ioctl是执行读取()的一种笨拙方式。(这里没有发布更多涉及的设置。)啊,我第一次读到
时错过了
read