OpenEdv-开源电子网

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

如截图所示,请问我设置为类指针,为什么就出错。

[复制链接]

83

主题

217

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2016-4-8
在线时间
116 小时
发表于 2017-2-20 11:29:10 | 显示全部楼层 |阅读模式
1金钱
设置成 指针,仿真的时候就会跳进死循环,出现问题,不设置成指针就没问题。

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

使用道具 举报

69

主题

978

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3772
金钱
3772
注册时间
2015-4-26
在线时间
765 小时
发表于 2017-2-20 11:30:45 | 显示全部楼层
野指针,没分配空间。不能这样用,而且这样太花哨了,没必要。
我有故事,你有酒吗
回复

使用道具 举报

83

主题

217

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2016-4-8
在线时间
116 小时
 楼主| 发表于 2017-2-20 11:38:07 | 显示全部楼层
来俩不甜的 发表于 2017-2-20 11:30
野指针,没分配空间。不能这样用,而且这样太花哨了,没必要。

那怎样用才正确? 不用指针么?用下面那种么?
回复

使用道具 举报

69

主题

978

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3772
金钱
3772
注册时间
2015-4-26
在线时间
765 小时
发表于 2017-2-20 11:39:51 | 显示全部楼层
vention 发表于 2017-2-20 11:38
那怎样用才正确? 不用指针么?用下面那种么?

p_atFrame = (Send_Command_Frame_type *)mymalloc(SRAMIN,sizeof(Send_Command_Frame_type));
在定义完指针后边加上这个
我有故事,你有酒吗
回复

使用道具 举报

83

主题

217

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2016-4-8
在线时间
116 小时
 楼主| 发表于 2017-2-20 11:43:22 | 显示全部楼层
来俩不甜的 发表于 2017-2-20 11:39
p_atFrame = (Send_Command_Frame_type *)mymalloc(SRAMIN,sizeof(Send_Command_Frame_type));
在定义完 ...

那你说的太花俏,请问要怎么改才不
回复

使用道具 举报

83

主题

217

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2016-4-8
在线时间
116 小时
 楼主| 发表于 2017-2-20 11:43:49 | 显示全部楼层
来俩不甜的 发表于 2017-2-20 11:39
p_atFrame = (Send_Command_Frame_type *)mymalloc(SRAMIN,sizeof(Send_Command_Frame_type));
在定义完 ...

那你说的太花俏,请问要用什么方式才不会
回复

使用道具 举报

69

主题

978

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3772
金钱
3772
注册时间
2015-4-26
在线时间
765 小时
发表于 2017-2-20 11:46:56 | 显示全部楼层
vention 发表于 2017-2-20 11:43
那你说的太花俏,请问要用什么方式才不会

你屏蔽掉的方式就很好啊,为什么要用指针呢。这个定义你在别的地方还要用得到吗?用得到就改成全局变量
我有故事,你有酒吗
回复

使用道具 举报

83

主题

217

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2016-4-8
在线时间
116 小时
 楼主| 发表于 2017-2-20 11:51:16 | 显示全部楼层
来俩不甜的 发表于 2017-2-20 11:46
你屏蔽掉的方式就很好啊,为什么要用指针呢。这个定义你在别的地方还要用得到吗?用得到就改成全局变量

只因我想着传送方便,传递参数的时候直接直接用
回复

使用道具 举报

69

主题

978

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3772
金钱
3772
注册时间
2015-4-26
在线时间
765 小时
发表于 2017-2-20 11:54:22 | 显示全部楼层
vention 发表于 2017-2-20 11:51
只因我想着传送方便,传递参数的时候直接直接用

那指针要先分配内存空间,不能定义完了直接用。
我有故事,你有酒吗
回复

使用道具 举报

83

主题

217

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2016-4-8
在线时间
116 小时
 楼主| 发表于 2017-2-20 11:56:36 | 显示全部楼层
来俩不甜的 发表于 2017-2-20 11:54
那指针要先分配内存空间,不能定义完了直接用。

明白了。可我见到别人有的程序好像也是从 函数参数那里定义的指针直接就用了
回复

使用道具 举报

83

主题

217

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2016-4-8
在线时间
116 小时
 楼主| 发表于 2017-2-20 12:04:17 | 显示全部楼层
来俩不甜的 发表于 2017-2-20 11:54
那指针要先分配内存空间,不能定义完了直接用。

像这些,他也是直接用了,也没有说再开辟空间什么的。  还有HAL的那些头 ,也是直接用了void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){
         if (htim==&htim17)
   {       
                 usTimecnt++;
         }
}

1.png
回复

使用道具 举报

24

主题

695

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1666
金钱
1666
注册时间
2016-4-29
在线时间
266 小时
发表于 2017-2-20 12:32:42 | 显示全部楼层
vention 发表于 2017-2-20 12:04
像这些,他也是直接用了,也没有说再开辟空间什么的。  还有HAL的那些头 ,也是直接用了void HAL_TIM_Per ...

1、指针定义了以后一定要有个指向,也就是要给这个指针赋值
u8 a;
u8 *p;
p = &a;//指针赋值
(*p)++;
2、函数的指针形参:该函数在被调用时,实参就会传进来,可以理解为这个指针被赋值了,所以是正确的
回复

使用道具 举报

83

主题

217

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2016-4-8
在线时间
116 小时
 楼主| 发表于 2017-2-20 14:15:33 | 显示全部楼层
d1z1y2 发表于 2017-2-20 12:32
1、指针定义了以后一定要有个指向,也就是要给这个指针赋值
u8 a;
u8 *p;

原来是这样子。明白了。 定义了指针 *p 后,就一定要 给指针p 赋上具体地址。
而作为函数形参的时候,函数被调用时候就给赋值了。是这个道理……
回复

使用道具 举报

24

主题

695

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1666
金钱
1666
注册时间
2016-4-29
在线时间
266 小时
发表于 2017-2-20 20:12:20 | 显示全部楼层
vention 发表于 2017-2-20 14:15
原来是这样子。明白了。 定义了指针 *p 后,就一定要 给指针p 赋上具体地址。
而作为函数形参的时候,函 ...

你去看一下函数的参数传递,还有指针的使用,记得谭浩强的书里讲得挺清楚
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-7 16:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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