OpenEdv-开源电子网

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

请教一个基本的嵌入式相关的问题

[复制链接]

9

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2019-6-3
在线时间
17 小时
发表于 2021-8-18 10:49:15 | 显示全部楼层 |阅读模式
6金钱
定义了一个数据结构
typedef struct
{
        uint8_t data_len;
        uint8_t *data_value;
}serial_report_t;
然后初始化的时候定义成全局变量
serial_report_t serial_report;
然后在某个函数中开辟了内存空间
serial_report.data_value = (uint8_t *)malloc(msg_len);
msg_len是收到的数据长度,
现在有两个问题请教一下:1。现在在其它的函数中释放这个内存,这样操作是否可行,应该注意什么问题

2。如果不释放这个内存是不是有影响呢
主要不理解的或者不知道的是    全局变量 它是一个栈,然后数据结构中的指针开辟了内存,那它应该是属于堆,堆应该要释放,然后就很混乱,不知道如果处理了,然后代码运行后有时候会报错 内容为 ASSERT func vProtFree line 371

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

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2021-8-18 11:16:44 | 显示全部楼层
首先, 如果说内存是循环使用, 比如你收到一数据包后处理, 处理完, 这数据就不再需要, 当另一数据包进来你又申请另一内存块, 这种情况下你是必须要释放内存的。
释放内存会报错, 不外以下几种原因
一 指针是空指针。 比如没赋过值的指针
二 指针被修改过。
三 已经用这指针释放过内存。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-24 16:32

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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