搜索

1

主题

2

帖子

32

积分

新手上路

Rank: 1

积分
32
发表于 2016-11-11 15:44:21 8927 浏览 3 回复

结构体指针与数组应用

刚在查看一段源码时发现一个关于结构体指针与数组的问题,弄清楚了,想来分享一下
先看  struct reg_dev
{
        char *data;
        unsigned long size;
       
        struct cdev cdev;
};
struct reg_dev *my_devices;
这里my_devices是一个结构体指针,没错吧!再看
for(i=0;i<DEVICE_MINOR_NUM;i++){
                my_devices[i].data = kmalloc(REGDEV_SIZE,GFP_KERNEL);
                memset(my_devices[i].data,0,REGDEV_SIZE);
                reg_init_cdev(&my_devices[i],i);
                device_create(myclass,NULL,MKDEV(numdev_major,numdev_minor+i),NULL,DEVICE_NAME"%d",i);
        }

这里就有问题了,my_devices明明只是个指针,为什么能当数组用???原因在下面:
my_devices = kmalloc(DEVICE_MINOR_NUM * sizeof(struct reg_dev),GFP_KERNEL);
这就是为什么my_devices可以当作数组使用的原因了,就是因为我们为它分配了相应的内存!所以就能把my_devices当作数组用了,实在不理解,你就记住这个结论!希望对你有所帮助!


回复

使用道具 举报

48

主题

604

帖子

1923

积分

版主

Rank: 7Rank: 7Rank: 7

积分
1923
发表于 2016-11-11 17:02:24
本帖最后由 TOPEET_moon 于 2016-11-11 17:08 编辑

学习了,不错
提醒一下:
kmalloc给数组分配内存
memset初始化赋0

如果指针当做数组,必须要经过上面两个步骤,否则会出现莫名其妙的结果~
如果这个指针不用了,可以使用free释放。


数组是在定义的时候就分配了内存的,所以可以直接拿来使用。
指针要当做数组使用,则必须在使用前,必须先确定到底需要多长,然后动态分配内存,清零,最后不用的时候可以释放掉。


在驱动中经常会遇到这种使用方法
回复 点赞

使用道具 举报

1

主题

2

帖子

32

积分

新手上路

Rank: 1

积分
32
 楼主| 发表于 2016-11-11 21:32:52
TOPEET_moon 发表于 2016-11-11 17:02
学习了,不错
提醒一下:
kmalloc给数组分配内存

恩恩,是的,谢了
回复 点赞

使用道具 举报

0

主题

22

帖子

131

积分

注册会员

Rank: 2

积分
131
发表于 2018-10-10 12:14:09
回复 点赞

使用道具 举报

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

本版积分规则

登录或注册

官方客服

QQ:2551456065

官方QQ群

195631883

扫一扫关注迅为公众号

群号652692981

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