指向字符串常量(字符串右值)的char指针,free的时候为什么会报错?

news2024/11/13 15:07:41

起因是如下代码

char *p = "abc";
free(p);

先说结果,这里会报错,会报一个错误如下
请添加图片描述

一开始还没反应过来,只知道 “test_content” 是一个右值,这是一个指向右值的指针。 但是free的时候为什么会报错呢?

首先要明确几个基本的知识:
(1) free() 函数一定要接收 一个 实实在在经过动态内存分配的内存块的地址。也就是说 free()函数只能释放经过 malloc、relloc、clloc等函数动态申请的内存块。
(2)“abc” , 这里确实是右值的概念,更准确的说这是一个字符串字面量,它实际上是一个指向字符数组的指针,是 一个 const char[4] , 包含了末尾的空字符 ‘\0’。 他的存储位置呢? 显然他是const ,它存储在 内存模型 的常量区。是只读的。

因此我们代码中的错误就是源自于你试图释放一个只读区域, 报的错。 绝对不是因为 p指向了内存为空的区域所以报的错。

如果想实现类似释放内存的操作,可以动态分配试试:

char*p = malloc(4);
strcpy(p, "abc");
free(p);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/835136.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HarmonyOS元服务开发实践:桌面卡片字典

一、项目说明 1.DEMO创意为卡片字典。 2.不同卡片显示不同内容:微卡、小卡、中卡、大卡,根据不同卡片特征显示同一个字的不同内容,基于用户习惯可选择喜欢的卡片。 3.万能卡片刷新:用户点击卡片刷新按钮查看新内容,同时…

NVM保姆级安装配置

nvm安装配置 1、NVM简介2、NVM安装三、NVM使用四、NVM常用命令 1、NVM简介 在项目开发过程中,使用到vue框架技术,需要安装node下载项目依赖,但经常会遇到node版本不匹配而导致无法正常下载,重新安装node却又很麻烦。为解决以上问…

浏览器调式的时候刷新页面network的日志和请求不会消失的解决办法

把“Preserve log”勾选去掉,F5刷新页面时,就是最新的日志,新的请求 把“Preserve log”勾上,F5刷新浏览器页面时,就会有历史日志,而不会消失

基于VR技术的新型实验室教学模式——VR线上生物实验室

随着科技的发展,虚拟现实技术已经逐渐走进了我们的生活。在教育领域中,虚拟现实技术也被广泛应用于各种学科的教学中。其中,VR线上生物实验室是广州华锐互动开发的,一种基于VR技术的新型教学模式,它能够为学生提供更加…

开源免费用|Apache Doris 2.0 推出跨集群数据复制功能

随着企业业务的发展,系统架构趋于复杂、数据规模不断增大,数据分布存储在不同的地域、数据中心或云平台上的现象越发普遍,如何保证数据的可靠性和在线服务的连续性成为人们关注的重点。在此基础上,跨集群复制(Cross-Cl…

镜头基础知识

本文介绍镜头基础知识。 1.焦距 焦距指透镜中心到光聚集之焦点的距离,如下图,通常用f表示。 焦距是正值,一束平行光将会聚集在一个点上,焦距是负值,一束平行光在通过透镜之后将会扩散开。 注意: 1)这里…

【Winform学习笔记(五)】引用自定义控件库(dll文件)

引用自定义控件库dll文件 前言正文1、生成dll文件2、选择工具箱项3、选择需要导入的dll文件4、确定需要导入的控件5、导入及使用 前言 在本文中主要介绍 如何引用自定义控件库(dll文件)。 正文 1、生成dll文件 通过生成解决方案 或 重新生成解决方案 生成 dll 文件 生成的…

MybatisPlus注意点

1、表id过长 默认生成的id过长,不是从1开始需要加如下注解,如果表已经建立,需要重新建表才生效 2、MybatisPlus表明字段非数据库字段 mybatis-plus 就可以用注解 TableField(exist false) 表明字段非数据库字段 TableName(value "o…

第十一次CCF计算机软件能力认证

第一题:打酱油 小明带着 N 元钱去买酱油。 酱油 10 块钱一瓶,商家进行促销,每买 3 瓶送 1 瓶,或者每买 5 瓶送 2 瓶。 请问小明最多可以得到多少瓶酱油。 输入格式 输入的第一行包含一个整数 N,表示小明可用于买酱油的…

第2章 C语言概述

本章介绍以下内容: 运算符: 函数:main()、printf() 编写一个简单的C程序 创建整型变量,为其赋值并在屏幕上显示其值 换行字符 如何在程序中写注释,创建包含多个函数的程序,发现程序的错误 什么是关键字 C程…

与时间赛跑:图算法如何加持自然灾害应急响应场景?

近日,受台风“杜苏芮”影响,华北、黄淮等地出现极端降雨过程,引发洪涝和地质灾害,造成京津冀地区的重大人员伤亡和财产损失。大家的心都被这场暴雨牢牢牵动着。 而在7月31日晚,小编的微信朋友圈开始被《京津冀暴雨紧急…

安达发|APS智能排程系统帮助企业提升生产效率

APS高级排产软件,这个名字听起来就像一把伞,为整个产业链提供了完美的遮蔽。它能够从产业链中提取实时数据信息,经过复杂的数学运算,为我们提供一个可调度、快速且可靠的生产计划。这款软件集成了多种先进技术,如优化算…

【Linux命令200例】awk文本处理工具的系统与实战讲述(常用)

🏆作者简介,黑夜开发者,全栈领域新星创作者✌,阿里云社区专家博主,2023年6月csdn上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。 🏆本文已…

抖音seo源码开发源代码搭建分享

抖音SEO源码开发涉及到以下几个方面: 前端开发:包括抖音SEO页面的设计与布局,以及需要使用到的前端技术,如HTML、CSS、JavaScript等。 后端开发:包括抖音SEO页面的数据获取和处理,以及需要使用到的后端技术…

[CKA]考试之调度 pod 到指定节点

由于最新的CKA考试改版,不允许存储书签,本博客致力怎么一步步从官网把答案找到,如何修改把题做对,下面开始我们的 CKA之旅 题目为: Task 创建一个Pod,名字为nginx-kusc00401,镜像地址是nginx…

Shell脚本学习-for循环结构3

案例1: 使用for循环结构在/oldboy目录下创建10个文件,名称依次为: chang-1 chang-2 chang-3 ... chang-10 脚本: [rootvm1 scripts]# cat for9.sh #!/bin/bash[ -d "/chang" ] || mkdir /changcd /changfor i i…

OA会议管理系统之我的审批(审批签字可生成图片)

一、前言 1.导读 OA会议管理系统之我的会议(会议排座&可拖拽座位&附源码)http://t.csdn.cn/iVLAD 书接上文,在上一篇中我们完成了我的会议功能,其中有功能会议送审,送审人就可以在我的审批功能中查看…

信息安全风险评估总结【GB/T 20984-2007】

文章目录 风险评估实施流程一.风险评估准备1.1确定风险评估目标1.2确定风险评估范围1.3组建评估团队1.4风险评估工作启动会议1.5系统调研1.6确定评估依据1.7确定评估工具1.8制定评估方案1.9获得支持 二.风险要素识别2.1实施整个流程图2.2资产识别2.2.1资产调查2.2.2资产分类2.2…

vCenter 7.0 的热迁移配置操作指南

vCenter 7.0 的热迁移配置操作指南 现在我们已经部署好了vCenter 7.0(VMware vCenter Server 7.0快速部署操作指南)和几台ESXi 7.0的虚拟主机(VMWare ESXi 7.0快速部署操作指南),我们可以继续测试之前操作失败的热迁移…

【练】要求打印,倒置线程,顺序执行。运行顺序为:线程1 线程2 线程1 线程2

要求定义一个全局变量 char buf[] "1234567",创建两个线程,不考虑退出条件,另: A线程循环打印buf字符串,B线程循环倒置buf字符串,即buf中本来存储1234567,倒置后buf中存储7654321. 不…