首页 > 代码库 > 《零死角玩转STM32》中的C语言之指针
《零死角玩转STM32》中的C语言之指针
关于Pointer,一定要杜绝“野指针”!下面的代码中定义了一个指向NVIC_InitTypeDef结构体类型的指针,但是并没有用“一块内存地址”来初始化该指针,因此是一个野指针!
由于没有被初始化,该指针可能指向内存的任何地方,包括0X00000000,由此带来的后果是对该指针的一切间接引用都是非法的,很有可能修改内存中代码区/数据区的数据。一定要杜绝使用这种指针!
static void EXTI_NVIC_Config(void){ NVIC_InitTypeDef *NVIC_InitStruct; /* .2 */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); NVIC_InitStruct ->NVIC_IRQChannel = EXTI0_IRQn; NVIC_InitStruct ->NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStruct ->NVIC_IRQChannelSubPriority = 1; NVIC_InitStruct ->NVIC_IRQChannelCmd = ENABLE; /* .3 */ NVIC_Init(NVIC_InitStruct); }
下面是更改后的代码:
static void EXTI_NVIC_Config(void){ NVIC_InitTypeDef NVIC_INIT_S; NVIC_InitTypeDef *NVIC_InitStruct = &NVIC_INIT_S; /* .2 */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); NVIC_InitStruct ->NVIC_IRQChannel = EXTI0_IRQn; NVIC_InitStruct ->NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStruct ->NVIC_IRQChannelSubPriority = 1; NVIC_InitStruct ->NVIC_IRQChannelCmd = ENABLE; /* .3 */ NVIC_Init(NVIC_InitStruct); }
《零死角玩转STM32》中的C语言之指针
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。