OpenEdv-开源电子网

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

STM32F4 C指针

[复制链接]

1

主题

11

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2018-1-21
在线时间
7 小时
发表于 2018-9-25 19:24:19 | 显示全部楼层 |阅读模式
1金钱
为什么图一里面的Addr等于0呢?求助!

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2018-9-26 02:15:03 | 显示全部楼层
回复

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2018-1-21
在线时间
7 小时
 楼主| 发表于 2018-9-26 10:18:53 | 显示全部楼层
正点原子 发表于 2018-9-26 02:15
说明你赋值的就是0

图一里面我有返回值啊(return &pObjDepInfo->pDiagram[label])
回复

使用道具 举报

60

主题

409

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2814
金钱
2814
注册时间
2012-10-17
在线时间
653 小时
发表于 2018-9-26 11:34:49 | 显示全部楼层
檢查看看函式裡的返回值是不是真的非0
回复

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2018-1-21
在线时间
7 小时
 楼主| 发表于 2018-9-26 19:40:22 | 显示全部楼层
civic7366 发表于 2018-9-26 11:34
檢查看看函式裡的返回值是不是真的非0

从图二可以看出来,返回值是非空啊?
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2018-9-26 20:01:30 | 显示全部楼层
这个写法有问题的
u8  aa=12, bb=34;

fun(aa, bb);  // 调用一函数

而函数是 u8* fun(u8 abc, u8 cde){

    return &abc;
}

函数返回的不是aa的地址, 返回的是局部变量abc在栈的地址, 编译应该是认为它没意义的, 优化掉了, 所以就变成是0
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2018-9-26 20:04:55 | 显示全部楼层
函数的参数如果是结构体, 就传指针, 否则既浪费栈的空间, 又减慢CPU的执行速度, 可谓百害而无一利, 必须紧记这一条
回复

使用道具 举报

60

主题

409

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2814
金钱
2814
注册时间
2012-10-17
在线时间
653 小时
发表于 2018-9-27 09:03:23 | 显示全部楼层
...所以函數返回一個栈的地址, 返回值會直接被優化為0?  

沒聽說過這個...也沒碰到過...
回复

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2018-1-21
在线时间
7 小时
 楼主| 发表于 2018-9-27 09:23:16 | 显示全部楼层
edmund1234 发表于 2018-9-26 20:01
这个写法有问题的
u8  aa=12, bb=34;

我用的是malloc分配的内存啊   它应该在堆里面啊?

78@T(PIZQB]SG29({R%_EK6.png
回复

使用道具 举报

1

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
69
金钱
69
注册时间
2016-11-24
在线时间
15 小时
发表于 2018-9-27 09:30:43 | 显示全部楼层
pDFIS *pobjDejInfo
回复

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2018-1-21
在线时间
7 小时
 楼主| 发表于 2018-9-27 09:43:28 | 显示全部楼层

我这么定义的

B298)F%BVRVJ[Z9P%NR_7WF.png
回复

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2018-1-21
在线时间
7 小时
 楼主| 发表于 2018-9-28 11:01:18 | 显示全部楼层
edmund1234 发表于 2018-9-26 20:01
这个写法有问题的
u8  aa=12, bb=34;

请问  Count的值赋给pObjDeoInfo->pNode[Count] 为什么是0x1128呢?


USMN42H785V5R66W(J))6[2.png
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2018-9-28 14:11:36 | 显示全部楼层
本帖最后由 edmund1234 于 2018-9-28 14:20 编辑
胥耀YaoXu 发表于 2018-9-28 11:01
请问  Count的值赋给pObjDeoInfo->pNode[Count] 为什么是0x1128呢?

不知道你是否把断点停在pObjDeoInfo->pNode[Count]=Count 这一句, 如果是, 那么这种监视方法是不对的
停下来表示它还没执行赋值, F10后Count又被+1了, 看的就已经不是之前被赋值的值, 而是看另一个未被赋值的值, 永远都看不到被赋值后的值
把pObjDeoInfo->pNode用Memory窗口来监视
回复

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2018-1-21
在线时间
7 小时
 楼主| 发表于 2018-10-1 11:16:32 | 显示全部楼层
edmund1234 发表于 2018-9-28 14:11
不知道你是否把断点停在pObjDeoInfo->pNode[Count]=Count 这一句, 如果是, 那么这种监视方法是不对的
...

谢谢  我的问题解决了(malloc分配不成功)   看了您的回复,我想请教一下,memory窗口怎么使用呢?

2018-10-01 (5).png
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 06:03

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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