2013-04-17 150 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