当前位置: 首页 > java >正文

C语言数据结构笔记5:Keil 编译器优化行为_malloc指针内存分配问题

 记录俩个keil5 STM32 的c语言编程中 ,编译器优化行为 和 指针内存分配问题。

目录

关闭Keil 编译器优化行为:

malloc指针内存分配问题

 多层嵌套的结构体:

用指针取值:

发现问题:

解决问题:

示例代码


关闭Keil 编译器优化行为:

在这里关闭,之前因为有编译器优化,导致作为参数传入处理的数组被清理了:

malloc指针内存分配问题

 多层嵌套的结构体:

我这有一个多层嵌套的结构体:这里不展示完全结构,

它的定义结构类似于这篇文章提到的结构体嵌套的结构:

C语言数据结构笔记3:Union联合体+结构体取8位Bool量-CSDN博客

用指针取值:

 指针获取结构体嵌套的某层结构体地址的值

但它没有被malloc分配空间

发现问题:

下载到STM32平台,结果发现每次上电后,第一次取值打印没问题,

后续都有问题,指针跑偏了:

而且是在第一次获取发送完正确的值之后,它瞬间把结构体存的值给修改了,导致后面都是读取的同一错误的值

但同样逻辑读取的最简函数的工程都没问题

解决问题:

添加malloc分配空间与free指针就行了:

最后补充一句:实测不指向NULL,重复获取寄存器值会卡死

 

示例代码

以下是一个简单的示例,演示如何使用 malloc 分配内存,然后使用 free 释放内存:

#include <stdio.h>
#include <stdlib.h>int main() {int n = 5; // 示例:分配一个包含 5 个整数的数组int *arr;// 分配内存arr = (int *)malloc(n * sizeof(int));// 检查内存分配是否成功if (arr == NULL) {printf("内存分配失败\n");return 1;}// 使用分配的内存for (int i = 0; i < n; i++) {arr[i] = i * 10; // 示例赋值}// 打印数组内容for (int i = 0; i < n; i++) {printf("arr[%d] = %d\n", i, arr[i]);}// 释放内存free(arr);// 将指针设置为 NULL,防止悬空指针arr = NULL;return 0;
}

http://www.xdnf.cn/news/13308.html

相关文章:

  • 【动作】动作标签分析和导出系统(按照分类)
  • Python 基础语法(1)【 适合0基础 】
  • 【valse2025】CV与ML领域重要进展
  • 在线客服系统:企业成功的关键支柱
  • Xshell远程连接Kali(默认 | 私钥)Note版
  • SciencePlots——绘制论文中的图片
  • [java八股文][MySQL面试篇]索引
  • JavaScript事件循环机制详解
  • Unity轻松实现麦克风录音与播放
  • git管理github上的repository(二)
  • 中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
  • 嵌入式学习之系统编程(十三)数据库
  • STL 5 适配器
  • MySQL基础语法总结
  • 如何在 Python 中去除列表重复项并保留顺序
  • BeckHoff <--> 基恩士(CV-X300)三维机械手视觉系统的通讯 控制
  • minio私有桶授权访问
  • Leetcode 3574. Maximize Subarray GCD Score
  • java 面向对象编程
  • Linux下制作Nginx绿色免安装包
  • 7.4.分块查找
  • vue3 字体颜色设置的多种方式
  • sysctl优先级顺序
  • 第3章 MySQL数据类型
  • (八)深度循环神经网络:长序列建模、注意力机制与多模态融合
  • CloudReadering
  • Prompt Tuning、P-Tuning、Prefix Tuning的区别
  • c语言中的hashmap
  • ArkUI-X跨平台Bridge最佳实践
  • 张彬彬《龙骨焚箱》开机 奇幻冒险题材引期待