一次miniSQL调试记录

过去的两个半小时de了个bug,有点无语


在写SelectFromWhere函数,有个结构实例res,里面存符合条件的所有记录。其中有个指针数组a[32],用来存这个表的每个属性的元信息。

跑这个段码的时候出现最烦的不同数量不同位置的printf结果不同的情况。或者说之前malloc的地址,居然被之后的操作给冲掉,改变了。肯定是地址空间没处理好了,于是想办法。

首先是简化,可以确定问题就出在给a[32]一个个malloc的过程附近。

然后怀疑自己指针数组分配地址掌握得不对,查资料,无果。

后来把这段函数直接搬到main里面跑,所有其他语句都注释了,还是不对,基本排除其他地方内存用太多导致这里错乱的可能。


后来直接另开一个文件,最大化精简代码,跑出来的printf还是有毒。具体说就是连续两句printf %p会出来不一样的,第二次会是303030303030一大串。

觉得不是size的问题了,所以我把32逐次改小,最后发现哪怕只是执行一个分配地址,两次也不一样。


这个时候开始警觉自己是不是结构定义错了。然后就发现res里面不是直接以a[32]为成员。

它是res->mt->a[32],我虽然记得分配res的地址,但是忘记分配mt的地址了。


如果让我写语言,一定要阻止用户不分配地址就指针操作。手动再见。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值