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

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

目录

[关闭Keil 编译器优化行为:](#关闭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;
}
相关推荐
wb1894 小时前
流编辑器sed
运维·笔记·ubuntu·云计算
sunny-ll5 小时前
【C++】详解vector二维数组的全部操作(超细图例解析!!!)
c语言·开发语言·c++·算法·面试
西装没钱买6 小时前
C语言多进程TCP服务器与客户端
服务器·c语言·tcp/ip·进程
嵌入式@秋刀鱼6 小时前
《第四章-筋骨淬炼》 C++修炼生涯笔记(基础篇)数组与函数
开发语言·数据结构·c++·笔记·算法·链表·visual studio code
嵌入式@秋刀鱼6 小时前
《第五章-心法进阶》 C++修炼生涯笔记(基础篇)指针与结构体⭐⭐⭐⭐⭐
c语言·开发语言·数据结构·c++·笔记·算法·visual studio code
m0_678693336 小时前
深度学习笔记26-天气预测(Tensorflow)
笔记·深度学习·tensorflow
whoarethenext6 小时前
使用 C/C++的OpenCV 裁剪 MP4 视频
c语言·c++·opencv
泽02026 小时前
C++之list的自我实现
开发语言·数据结构·c++·算法·list
桂?6 小时前
使用离线依赖解决Android Studio编译报错(下载不了jar)——笔记
笔记·android studio·jar
tiandyoin7 小时前
如何给 C:\Windows\WinSxS\ 瘦身?
c语言·开发语言·windows