【发布时间】:2021-12-05 02:07:33
【问题描述】:
我有如下 C 代码(最小可重现示例):
BYTE *myPointer;
doStuff(&myPointer); //mallocs space and sets myPointer to point to this space
FILE* myFile = fopen(fileName, "rb+");
fseek(myFile, 0, SEEK_SET);
fwrite(myPointer, 32, 1, myFile); //<------- problematic line
现在这段代码可以正常工作并完成它应该做的事情,但是 valgrind 在fwrite(myPointer, 32, 1, myFile); 行抛出以下错误:
Syscall param write(buf) points to uninitialised byte(s)
我认为这是因为 Valgrind 认为 myPointer 是未初始化的。
这很公平,但在 doStuff 函数中,我分配空间并将 myPointer 设置为指向它,所以一切都按预期工作。
有什么方法可以让 valgrind 知道这一点/消除错误吗?
谢谢
【问题讨论】:
-
您一定没有正确执行此操作,否则
valgrind不会抱怨它未初始化。贴出doStuff()的代码。 -
分配内存还不够,还要初始化内存的内容。您是否至少填写了 32 个字节?
-
啊,好的,非常感谢,我认为 doStuff() 有问题,我会再深入研究一下,没想到 valgrind 不会抱怨!
-
使用calloc,内存会被初始化
标签: c pointers malloc valgrind