OpenEdv-开源电子网

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

管理内存的三个问题,指针真太难了

[复制链接]

21

主题

60

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
384
金钱
384
注册时间
2023-7-23
在线时间
89 小时
发表于 2024-2-24 21:58:17 | 显示全部楼层 |阅读模式
3金钱
本帖最后由 安打 于 2024-2-27 21:29 编辑

1,在malloc.h里定义结构体struct _m_mallco_dev
{
    void (*init)(uint8_t);          /* 初始化 */
    uint16_t (*perused)(uint8_t);   /* 内存使用率 */
    uint8_t *membase[SRAMBANK];     /* 内存池 管理SRAMBANK个区域的内存 */
    MT_TYPE *memmap[SRAMBANK];      /* 内存管理状态表 */
    uint8_t  memrdy[SRAMBANK];      /* 内存管理是否就绪 */
};

其中MT_TYPE没找到定义

2,mallco_dev.memmap中,明明在定义的结构体里是一维数组,但为什么有mallco_dev.memmap[memx][index + i] = 0 变成二维数组,为什么没有报错?

3,void my_mem_set(void *s, uint8_t c, uint32_t count)
{
    uint8_t *xs = s;

    while (count--)*xs++ = c;
}
之中,虽然void *s指定了位置,但是简单粗暴的令s的内存地址后面任意数位都赋值零会不会造成内存泄露,或者把本不应该赋值为零的内存赋值为零?

实验33 内存管理实验.rar

5.29 MB, 下载次数: 0

最佳答案

查看完整内容[请看2#楼]

看不懂,能不能详细说说
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

21

主题

60

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
384
金钱
384
注册时间
2023-7-23
在线时间
89 小时
 楼主| 发表于 2024-2-24 21:58:18 来自手机 | 显示全部楼层
LcwSwust 发表于 2024-2-26 15:55
memmap[SRAMBANK] 这个数组存的是指针,
指针可以用类似数组的方式访问,看起来就多了1维:
char *p;

看不懂,能不能详细说说
回复

使用道具 举报

5

主题

66

帖子

0

精华

初级会员

Rank: 2

积分
194
金钱
194
注册时间
2023-6-26
在线时间
53 小时
发表于 2024-2-26 14:00:22 | 显示全部楼层
第一个问题,我不知道你是看的那个工程,正常来说是能跳转的,肯定有定义
第二个问题,原子的工程测试的两个内存块,一个是片内的,一个是外挂的,可以看看.c的结构体
第三个问题,malloc内存管理的是你开辟好的那片空间,没超过开辟空间的大小是不会有问题的
回复

使用道具 举报

10

主题

3281

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8205
金钱
8205
注册时间
2020-5-11
在线时间
3700 小时
发表于 2024-2-26 15:55:57 | 显示全部楼层
memmap[SRAMBANK] 这个数组存的是指针,
指针可以用类似数组的方式访问,看起来就多了1维:
char *p;
*(p+1)=5; 和 p[1]=5;  是一样的
专治疑难杂症
回复

使用道具 举报

21

主题

60

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
384
金钱
384
注册时间
2023-7-23
在线时间
89 小时
 楼主| 发表于 2024-2-27 21:15:42 | 显示全部楼层
HelloSiri 发表于 2024-2-26 14:00
第一个问题,我不知道你是看的那个工程,正常来说是能跳转的,肯定有定义
第二个问题,原子的工程测试的两 ...

就是这个例程帮忙看看

实验33 内存管理实验.rar

5.29 MB, 下载次数: 0

回复

使用道具 举报

70

主题

6697

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
12691
金钱
12691
注册时间
2012-11-26
在线时间
3710 小时
发表于 2024-2-28 09:59:14 | 显示全部楼层
安打 发表于 2024-2-27 21:15
就是这个例程帮忙看看

人家已经回答的很到位了,如果你看不懂,就先用着,或者自己去增强下自己的C语言能力,再回来看
学无止境
回复

使用道具 举报

10

主题

3281

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8205
金钱
8205
注册时间
2020-5-11
在线时间
3700 小时
发表于 2024-2-28 10:12:13 | 显示全部楼层
本帖最后由 LcwSwust 于 2024-2-28 10:13 编辑
安打 发表于 2024-2-26 21:53
看不懂,能不能详细说说

把我说的p替换成memmap[SRAMBANK] 再看,是不是变成了二维?
不明白的话再百度一下“指针与一维数组”
专治疑难杂症
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-23 10:03

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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