OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4967|回复: 7

新人~浏览目录程序,指针内存问题,Segmentation fault (core dumped)

[复制链接]

10

主题

26

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2020-9-10
在线时间
21 小时
发表于 2020-11-2 13:36:32 | 显示全部楼层 |阅读模式
10金钱
    以下程序报错   Segmentation fault (core dumped),然后我把指针改为 struct stat stat_buf就没有问题了。请问这是什么原因,指针分配了内存了的,为什么还是不行。

      struct stat* stat_buf= malloc(sizeof(stat));

       dp = opendir(argv[2]);
        if(dp == null) perror("打开目录失败");
        chdir(argv[2]);
        puts("开始输出目录");
        while((entry = readdir(dp)) != null)
        {
             stat(entry->d_name,&stat_buf);
            if(stat_buf->st_mode & S_IFDIR)
                        printf("%s\n",entry->d_name);

        }

最佳答案

查看完整内容[请看2#楼]

struct stat* stat_buf= malloc(sizeof(stat)); 应该改成 struct stat* stat_buf= malloc(sizeof(struct stat)); 我试了下,struct stat stat_buf= malloc(4) 这样是通不过编译的
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

312

帖子

0

精华

高级会员

Rank: 4

积分
907
金钱
907
注册时间
2011-10-19
在线时间
196 小时
发表于 2020-11-2 13:36:33 | 显示全部楼层
本帖最后由 ufbycd 于 2020-11-2 15:10 编辑
sc1099 发表于 2020-11-2 14:00
struct stat* stat_buf= malloc(sizeof(stat));

       dp = opendir(argv[2]);

struct stat* stat_buf= malloc(sizeof(stat)); 应该改成 struct stat* stat_buf= malloc(sizeof(struct stat));

我试了下,struct stat  stat_buf= malloc(4) 这样是通不过编译的

回复

使用道具 举报

10

主题

26

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2020-9-10
在线时间
21 小时
 楼主| 发表于 2020-11-2 13:40:28 | 显示全部楼层
这里地址分配没问题,不是null
回复

使用道具 举报

3

主题

312

帖子

0

精华

高级会员

Rank: 4

积分
907
金钱
907
注册时间
2011-10-19
在线时间
196 小时
发表于 2020-11-2 13:47:57 | 显示全部楼层
问题描述不清晰
回复

使用道具 举报

10

主题

26

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2020-9-10
在线时间
21 小时
 楼主| 发表于 2020-11-2 14:00:56 | 显示全部楼层
sc1099 发表于 2020-11-2 13:40
这里地址分配没问题,不是null

struct stat* stat_buf= malloc(sizeof(stat));

       dp = opendir(argv[2]);
        if(dp == null) perror("打开目录失败");
        chdir(argv[2]);
        puts("开始输出目录");
        while((entry = readdir(dp)) != null)
        {
             stat(entry->d_name,stat_buf);
            if(stat_buf->st_mode & S_IFDIR)
                        printf("%s\n",entry->d_name);

        }
这段程序,stat_buf是结构体指针,运行报错。如果我把stat_buf改成结构体而不是指针就没有问题。为什么。
回复

使用道具 举报

10

主题

26

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2020-9-10
在线时间
21 小时
 楼主| 发表于 2020-11-2 17:11:39 | 显示全部楼层
ufbycd 发表于 2020-11-2 14:26
struct stat* stat_buf= malloc(sizeof(stat)); 应该改成 struct stat* stat_buf= malloc(sizeof(struct  ...

好的,谢谢~
回复

使用道具 举报

10

主题

26

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2020-9-10
在线时间
21 小时
 楼主| 发表于 2020-11-2 17:22:45 | 显示全部楼层
ufbycd 发表于 2020-11-2 13:36
struct stat* stat_buf= malloc(sizeof(stat)); 应该改成 struct stat* stat_buf= malloc(sizeof(struct  ...

我试了一下确实是这个问题,请问下这是什么原理,为什么要加struct
回复

使用道具 举报

3

主题

312

帖子

0

精华

高级会员

Rank: 4

积分
907
金钱
907
注册时间
2011-10-19
在线时间
196 小时
发表于 2020-11-3 09:01:48 | 显示全部楼层
sc1099 发表于 2020-11-2 17:22
我试了一下确实是这个问题,请问下这是什么原理,为什么要加struct

加struct才算结构体类型,而你的源码可能有一个变量名也叫stat但不是struct stat类型所以才通过了编译。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 21:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表