OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3314|回复: 1

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

[复制链接]

42

主题

358

帖子

0

精华

高级会员

Rank: 4

积分
890
金钱
890
注册时间
2014-8-16
在线时间
193 小时
发表于 2018-7-9 20:36:05 | 显示全部楼层 |阅读模式
最近在开发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
三下五除二修改了其他部分代码,编译,下载,调试,断点,一番操作行云流水。

卧槽?
问题解决了?

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

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

70

主题

6761

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13110
金钱
13110
注册时间
2012-11-26
在线时间
3812 小时
发表于 2018-7-9 21:37:12 | 显示全部楼层
一般定义变量的时候,要进行初始化,你可能是开了优化了,不开优化的话,可能不会出现异常。。。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-1 02:25

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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