结构体初值设置问题小记

2023-10-09 14:30

本文主要是介绍结构体初值设置问题小记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 前言
    • esp32 panic报错LoadProhibited
    • 原因探究

前言

在搞esp32 ota功能的时候,esp32一加上空中升级的功能,就不断重启。查了两天,才发现是结构体初始化赋值的问题。

esp32 panic报错LoadProhibited

esp32ota的用来初始化的结构体大致长这个样子,有指针和其他类型的esp_http_client_config_t

typedef struct {const char                  *url;                /*!< HTTP URL, the information on the URL is most important, it overrides the other fields below, if any */const char                  *host;               /*!< Domain or IP as string */int                         port;                /*!< Port to connect, default depend on// ....} esp_http_client_config_t;

我的程序,我在初始化结构体的时候,没有在定义的时候定义并初始化。

    esp_http_client_config_t config;config.url = "http://192.168.1.65:8888//hello_world.bin",config.cert_pem = (char *)server_cert_pem_start,config.keep_alive_enable = true,    

在查coredump信息的时候发现,挂在了读config->path这里。
正确的程序

    esp_http_client_config_t config = {.url = "http://192.168.1.65:8888//smart_car.bin",.cert_pem = (char *)server_cert_pem_start,.keep_alive_enable = true,    };

原因探究

探究其根本原因就是,如果结构体的成员有指针的话,如果不采用定义的时候就初始化的话,指针是野指针,会指向随意一块内存。做个测试。测试代码如下:

#include <iostream>
typedef struct
{int num;const char* path;
} structA;int main()
{structA a;a.num=100;std::cout<<a.path<<std::endl;return 0;
}

如果是这样初始化结构体,可以发现,会抛出异常,可以看到指向的内存是地址是0x10。
在这里插入图片描述
如果在定义的时候初始化结构体,指针就会是一个空指针。就不会抛出异常。

这篇关于结构体初值设置问题小记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/173480

相关文章

idea设置快捷键风格方式

《idea设置快捷键风格方式》在IntelliJIDEA中设置快捷键风格,打开IDEA,进入设置页面,选择Keymap,从Keymaps下拉列表中选择或复制想要的快捷键风格,点击Apply和OK即可使... 目录idea设www.chinasem.cn置快捷键风格按照以下步骤进行总结idea设置快捷键pyth

MySQL快速复制一张表的四种核心方法(包括表结构和数据)

《MySQL快速复制一张表的四种核心方法(包括表结构和数据)》本文详细介绍了四种复制MySQL表(结构+数据)的方法,并对每种方法进行了对比分析,适用于不同场景和数据量的复制需求,特别是针对超大表(1... 目录一、mysql 复制表(结构+数据)的 4 种核心方法(面试结构化回答)方法 1:CREATE

Springboot3统一返回类设计全过程(从问题到实现)

《Springboot3统一返回类设计全过程(从问题到实现)》文章介绍了如何在SpringBoot3中设计一个统一返回类,以实现前后端接口返回格式的一致性,该类包含状态码、描述信息、业务数据和时间戳,... 目录Spring Boot 3 统一返回类设计:从问题到实现一、核心需求:统一返回类要解决什么问题?

maven异常Invalid bound statement(not found)的问题解决

《maven异常Invalidboundstatement(notfound)的问题解决》本文详细介绍了Maven项目中常见的Invalidboundstatement异常及其解决方案,文中通过... 目录Maven异常:Invalid bound statement (not found) 详解问题描述可

MyBatis配置文件中最常用的设置

《MyBatis配置文件中最常用的设置》文章主要介绍了MyBatis配置的优化方法,包括引用外部的properties配置文件、配置外置以实现环境解耦、配置文件中最常用的6个核心设置以及三种常用的Ma... 目录MyBATis配置优化mybatis的配置中引用外部的propertis配置文件⚠️ 注意事项X

idea粘贴空格时显示NBSP的问题及解决方案

《idea粘贴空格时显示NBSP的问题及解决方案》在IDEA中粘贴代码时出现大量空格占位符NBSP,可以通过取消勾选AdvancedSettings中的相应选项来解决... 目录1、背景介绍2、解决办法3、处理完成总结1、背景介绍python在idehttp://www.chinasem.cna粘贴代码,出

SpringBoot整合Kafka启动失败的常见错误问题总结(推荐)

《SpringBoot整合Kafka启动失败的常见错误问题总结(推荐)》本文总结了SpringBoot项目整合Kafka启动失败的常见错误,包括Kafka服务器连接问题、序列化配置错误、依赖配置问题、... 目录一、Kafka服务器连接问题1. Kafka服务器无法连接2. 开发环境与生产环境网络不通二、序

SpringSecurity中的跨域问题处理方案

《SpringSecurity中的跨域问题处理方案》本文介绍了跨域资源共享(CORS)技术在JavaEE开发中的应用,详细讲解了CORS的工作原理,包括简单请求和非简单请求的处理方式,本文结合实例代码... 目录1.什么是CORS2.简单请求3.非简单请求4.Spring跨域解决方案4.1.@CrossOr

nacos服务无法注册到nacos服务中心问题及解决

《nacos服务无法注册到nacos服务中心问题及解决》本文详细描述了在Linux服务器上使用Tomcat启动Java程序时,服务无法注册到Nacos的排查过程,通过一系列排查步骤,发现问题出在Tom... 目录简介依赖异常情况排查断点调试原因解决NacosRegisterOnWar结果总结简介1、程序在

解决java.util.RandomAccessSubList cannot be cast to java.util.ArrayList错误的问题

《解决java.util.RandomAccessSubListcannotbecasttojava.util.ArrayList错误的问题》当你尝试将RandomAccessSubList... 目录Java.util.RandomAccessSubList cannot be cast to java.