旧事重提-指针数组/指针的指针

本文通过一个实际案例探讨了在C语言中处理配置文件时遇到的问题,特别是关于指针数组与指针的指针的正确使用方法,以及不当的内存分配方式如何导致了难以察觉的bug。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

曾经以为自己很好的了解了指针数组与指针的指针,而最近出现的一个BUG 让我不得不又重新认识了一下,
简单事简单说;


typedef structd _section section;
struct  _option{
    char *name;
    char *value;
}
struct  _section{
   char *name;
   struct _options options**;//_options *options[] 写成指针数组的话就是这个样子了
};

struct _appcfg{
    int count;
    section **sections;
}

这是读取配置文件中的一个结构。配置文件由配置项sections和options组成,每个section包含一个或者多个option
_section中包含的options便是具体的配置项。

代码基本结构如下
struct _appcfg appcfg;
.....
appcfg.sections = malloc(count);

大家别不相信,这真的是我写的。gcc编译也没出问题,警告都没有!!
并且在相当长一段时间内都没有发现有什么不妥。原因就是我的配置项section从来没多于3个,呵呵,这个可是最关键的哦。
直到有一天,我的配置文件突然多了很多的section,BUG终于出来了。
现象如下:
1.可以正常访问,数据没什么不对
2.三个section没有问题,四个section以上,free时发生“double free”错误。

当中原因呢,看了文章的自己想想。我就不多说了,只写目前没有问题的写法

appcfg.sections = (section **)malloc(count * sizeof(section *));





评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值