gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 02:47:23 25 4
gpt4 key购买 nike

这段非常简单的 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 结构有关,但我不确定。如果我针对失败案例运行它,则不会出现段错误。

最佳答案

改变

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

进入

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

你应该没问题。

如 n.m. 所评论,请使用编译器选项 -Wall 及早发现严重错误。

关于c - 为什么这个简单的 C 程序会出现段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25834561/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com