2013-04-17 2 views
0

Я использую следующий код, чтобы найти использование диска моего /Файловая система Статистика

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

The PError продолжает печать «Bad Адрес» и случайное число для размера.

Bad address

3264987920

PS: Я пытался sudo ./a.out, statfs("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 Right. 'statfs()' и 'struct statfs' должны использоваться вместе и' statfs64() 'и' struct statfs64'. Использование последнего устарело; они используются вместо 'statfs()', если определены правильные символы. – glglgl

0

Вы использовали statfs * стат, без выделения памяти, следовательно, дикое использование указателя может указывать на любое место (недопустимый адрес памяти) Либо Инициализировать его действительную память или использовать переменные и передать его ссылку.

+0

Вы говорите то же, что [Джон сказал за 7 часов до вас ...] (http://stackoverflow.com/a/16050052/296974) – glglgl

Смежные вопросы