打印

一个因为指针没有初始化赋值导致的问题

[复制链接]
255|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
小蘭|  楼主 | 2018-7-14 13:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近在开发stm32的加密库配合rtx操作系统,用到了大量的指针和内存管理。

刚开始定义了变量:RNGstate_stt *RNGstate;
并对指针进行内存分配操作:RNGstate = (RNGstate_stt*)ramController.Internal->malloc(sizeof(RNGstate_stt));
对RNG进行初始化后一切正常,但是生成随机数后发生了诡异的现象,RNGstate所指向的地址变成了无意义的乱码。就只是单纯的执行了RNGgenWords函数,期间没有发成中断,没有任务切换,一切都发生的悄无声息。

然而如果不使用指针的方式,直接定义变量:RNGstate_stt RNGstate;
执行RNGgenWords(&RNGstate, NULL, randombytes, sizeof(randombytes)); 那么一切将会按照预期结果进行输出,我不禁陷入了无尽的沉思。

如果同时我定义了指针变量:RNGstate_stt RNGstate,*test;并对test赋予内存空间。
同时进行RNGinit初始化操作后,RNGstate与test所包含的内容保持一致。
然后在进行RNGgenWords(&RNGstate, NULL, randombytes, sizeof(randombytes));并没有使用test进行随机数生成。
那么更加诡异的事情发生了!RNGstate正确,test指向了一片未知的区域。
当我把test与RNGstate分开两行定义,执行RNGgenWords后,那么RNGstate与test的内容同时发生了变化,test不再指向未知区域。
首先可以排除的是指针越界,因为我检查过了内存管理功能,debug时也开启了系统堆栈溢出检查以及操作系统支持,编译器-0优化以及结构体字节对齐。
办公室的气氛变得越来越恐怖,温度貌似稍稍比刚才低了一些。

就在此时! 关掉空调,反手多加了两段代码:RNGstate_stt *RNGstate = NULL;
三下五除二修改了其他部分代码,编译,下载,调试,断点,一番操作行云流水。

卧槽?
问题解决了?

这到底是什么力量,难道是程序猿之神附体,此时我不是一个人在编程?
现在我只能倒吸一口冷气,嘶~,打个滴滴下班回家了。回头一想,恐怖如斯。

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

451

主题

463

帖子

1

粉丝