为什么这个简单的C程序会出现段错误?

时间:2014-09-14 14:54:23

标签: c segmentation-fault

这个非常简单的C代码编译并运行,但它在结束时会出现段错误。我无法弄清楚原因。

#include <sys/types.h>
#include <sys/statfs.h>
#include <stdio.h>

int main(int argc, char **argv) {

        struct statfs sf;

        if (stat(argv[1], &sf) == 0 ) {
                printf( "Statfs succeeded!\n");
                printf("\tFs type:\t %#lx\n", sf.f_type);
                printf("\tTotal blocks:\t %lu\n", sf.f_blocks);
                printf("\tFree blocks:\t %lu\n", sf.f_bavail);
                printf("\tinodes:\t %lu\n", sf.f_files);
        } else {
                printf("Statfs failed!\n");
                return 1;
        }

        return 0;
}

编译并运行:

[root@dadam-4 ~]# gcc statfs-test.c -o statfs-test
[root@dadam-4 ~]# ./statfs-test /dev/sda1
Statfs succeeded!
    Fs type:     0x5
    Total blocks:    1
    Free blocks:     6
    inodes:  2049
Segmentation fault (core dumped)

它认为问题与statfs结构没有被释放有关,但我不确定。如果我为失败案例运行它,就没有段错误。

1 个答案:

答案 0 :(得分:2)

更改

if (stat(argv[1], &sf) == 0 ) {

if (statfs(argv[1], &sf) == 0 ) {

你应该没事。

如上所述,请使用编译器选项-Wall来及早发现令人讨厌的错误。