我正在从文件中读取浮点数据,Valgrind 给出错误“大小 4 的读取无效”。我是 Valgrind 的新用户,不明白为什么会出现此错误。
我的代码是:
int main()
{
N = 220928;
std::vector<std::complex<float>> rxTmp(N);
FILE *fid;
char fn[] = "data.bin";
fid = fopen(fn, "rb");
std::size_t ct = fread(&rxTmp[0],4,N,fid);
fclose(fid);
return 0;
}
代码编译并执行没有错误,但 Valgrind 给出无效读取。
==41376== 1 errors in context 1 of 1:
==41376== Invalid read of size 4
==41376== at 0x77E0180: fread (in /usr/lib64/libc-2.17.so)
==41376== by 0x423F67: main (main.cc:77)
==41376== Address 0x0 is not stack'd, malloc'd or (recently) free'd
其中第 77 行是 fread 语句。 文件大小正确;文件中有 220928*4 个浮点数。
读取任何小于 N 的值都会导致相同的 Valgrind 错误。
我尝试将读取的元素数量更改为小于文件中的元素数量,但仍然出现 Valgrind 错误
添加
fopen()
调用的基本错误检查后,我无法重现该问题:
#include <complex>
#include <iostream>
#include <vector>
#include <stdio.h>
int main() {
std::size_t N = 220928;
std::vector<std::complex<float> > rxTmp(N);
FILE *fid = fopen("data.bin", "rb");
if(!fid) {
std::cerr << "Could not open file\n";
return 1;
}
std::size_t ct = fread(&rxTmp[0],4,N,fid);
fclose(fid);
return 0;
}