2013-04-17 47 views
0

我用下面的代码来找到我/文件系统统计

int main() 
{ 
    struct statfs *stat; 
    statfs64("/tmp",stat); 
    perror(""); 
    printf("%lu \n",stat->f_bfree*stat->f_bsize); 
    return 0; 
} 

的PERROR的磁盘使用情况不断打印“错误地址”和大小的随机数。

Bad address

3264987920

PS:我尝试sudo ./a.outstatfs("a.out",stat)

可能是什么问题?

回答

3

你已经声明了一个指向statfs结构的指针,但实际上并没有为这样的结构分配空间。指针指向无处地带。这是未初始化的,它没有指向任何合法的地方。

struct statfs stat; 

if (statfs64("/tmp", &stat) == -1) { 
    perror("statfs64"); 
} 
else { 
    printf("%lu\n", stat.f_bfree * stat.f_bsize); 
} 
+0

感谢:)工作:)我想补充说,'statfs64'可能会触发一个分段错误,这可以通过使用'statfs'来代替 – rjv

+0

@RajeevS对。 'statfs()'和'struct statfs'应该和'statfs64()'和'struct statfs64'一起使用。后者的使用已被废弃;如果定义了正确的符号,它们将被用来代替'statfs()'。 – glglgl

0

已使用的statfs *统计,没有内存分配,因此野指针的使用可能指向任何地方(非法内存地址) 无论是用有效的内存初始化或使用变量,并通过其引用。

+0

您的意思与[约翰说在您之前的7个半小时之前...](http://stackoverflow.com/a/16050052/296974) – glglgl