我使用以下代码查找/
int main()
{
struct statfs *stat;
statfs64("/tmp",stat);
perror("");
printf("%lu \n",stat->f_bfree*stat->f_bsize);
return 0;
}
perror继续打印“Bad Address”和一个随机数字。
Bad address
3264987920
PS:我尝试了sudo ./a.out
,statfs("a.out",stat)
可能是什么问题?
答案 0 :(得分:4)
您已经声明了一个指向statfs
结构的指针,但实际上没有为这样的结构分配空间。指针指向无处。它没有初始化,它没有任何合法性。
struct statfs stat;
if (statfs64("/tmp", &stat) == -1) {
perror("statfs64");
}
else {
printf("%lu\n", stat.f_bfree * stat.f_bsize);
}
答案 1 :(得分:0)
你已经使用了statfs * stat而没有内存分配因此可能指向任何地方的非常指针用户(非法内存地址) 使用有效内存初始化它或使用变量并传递其引用。