最近在开发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;
三下五除二修改了其他部分代码,编译,下载,调试,断点,一番操作行云流水。
卧槽?
问题解决了?
这到底是什么力量,难道是程序猿之神附体,此时我不是一个人在编程?
现在我只能倒吸一口冷气,嘶~,打个滴滴下班回家了。回头一想,恐怖如斯。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>