Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >C++中与free()相关的查询

C++中与free()相关的查询
EN

Stack Overflow用户
提问于 2011-11-21 16:04:26
回答 5查看 216关注 0票数 3

如果您尝试释放未使用malloc/calloc分配的内存,会发生什么情况

我的意思是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void main()
{
int temp = 0;
int *ptr = &temp;
free(ptr);
}

我以为free()会返回一些错误代码,但是free()没有返回值。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-11-21 16:07:16

如果你在之前没有分配的指针上调用free(),它将触发未定义的行为。

来自Linux man pages

函数释放ptr指向的内存空间,这些内存空间必须是由先前调用malloc()、calloc()或realloc()返回的。否则,或者如果之前已经调用了free(ptr),则会发生未定义的行为。如果ptr为NULL,则不执行任何操作。

票数 8
EN

Stack Overflow用户

发布于 2011-11-21 16:22:07

添加到Malcolm's answer:这是ISO/IEC9899:1999,7.20.3.2未定义的行为:

否则,如果参数与

mallocrealloc函数先前返回的指针不匹配...行为是未定义的。

请参阅此处的标准草案:http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf

票数 4
EN

Stack Overflow用户

发布于 2011-11-21 16:21:45

我对上面的代码做了一点扩展:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>
#include <stdlib.h>

void main()
{
  int temp = 0;
  int *ptr = &temp;
  printf("Before: %0X\n", ptr);
  free(ptr);
  printf("After: %0X\n", ptr);
  getchar();
}

如果此代码是由Visual Studio2010编译的,则在调试配置中,调用free会启动“调试断言失败”消息。此错误消息来自dbgheap.c:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/*
 * If this ASSERT fails, a bad pointer has been passed in. It may be
 * totally bogus, or it may have been allocated from another heap.
 * The pointer MUST come from the 'local' heap.
 */
_ASSERTE(_CrtIsValidHeapPointer(pUserData));

使用MinGW-GCC编译,生成的exe运行时没有错误( "After:...“行显示与“之前:...”相同的ptr值。行)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8214692

复制
相关文章
FreeWebHostingArea_for free 与free用法
by Elise Moreau Updated April 09, 2018 Wondering if there are there any good sites out there made p
全栈程序员站长
2022/11/08
7600
浅谈malloc()与free()
malloc函数的函数原型为:void* malloc(unsigned int size),它根据参数指定的尺寸来分配内存块,并且返回一个void型指针,指向新分配的内存块的初始位置。如果内存分配失败(内存不足),则函数返回NULL。
Tencent JCoder
2022/05/06
1.4K0
浅谈malloc()与free()
Linux中的Free命令详解
我的 Linux系统上有多少可用 RAM内存?是否有足够的可用内存来安装和运行新应用程序? 在 Linux系统中,可以使用free命令获取系统内存使用情况的详细报告。 free命令显示系统使用和空闲的内存情况,包括物理内存、交互区内存(swap)和内核缓冲区内存
框架师
2021/11/22
5K0
Linux中的Free命令详解
MYSQL 中的查询技巧 与 MYSQL 8 并行查询
最近公司的系统一点点的开始了拆分,从ORACLE 转移到 MYSQL 中,部分程序员的想法在使用MYSQL中还是没有转变过来,直接将ORALCE中的查询语句直接搬到了MYSQL。使用MYSQL 重要的两点,1 逻辑上移,数据库不在是承担你逻辑的第一选择,程序的比重将变得更重要 2 数据库容器化,数据库将变得不再那么重要,而是仅仅是承载数据的地方,或者甚至高级的设计,数据库将变得可有可无,这当然也的和业务挂钩,不是放之四海都OK。
AustinDatabases
2019/06/24
8.1K0
SQL中的连接查询与嵌套查询「建议收藏」
若一个查询同时涉及两个或两个以上的表,则称之为连接查询。连接查询是数据库中最最要的查询,
全栈程序员站长
2022/08/22
5K0
SQL中的连接查询与嵌套查询「建议收藏」
Oracle中的分组查询与DML
a) 当表格的每一列都要插入数据时, 可以省略列名不写. 需 要保证值的顺序和列的顺序一致.
时间静止不是简史
2020/07/24
1.2K0
C++:27---new delete malloc free
上一节我讲了new和delete,有人问这不是和C语言的malloc/free为C的标准库函数差不多么
用户3479834
2021/02/03
6160
C++:27---new delete malloc free
并行编程中的lock free技术
lock free (中文一般叫“无锁”,一般指的都是基于CAS指令的无锁技术) 是利用处理器的一些特殊的原子指令来避免传统并行设计中对锁(lock)的使用。
全栈程序员站长
2022/09/09
6210
C++并发实战19:lock free编程
大家好,又见面了,我是你们的朋友全栈君。 涉及到并行/并发计算时,通常都会想到加锁,加锁可以保护共享的数据,不过也会存在一些问题: 1. 由于临界区无法并发运行,进入临界区就需要等待,加锁使得效率的降低。多核CPU也不能发挥全部马力 2. 在复杂的情况下,很容易造成死锁,并发进程、线程之间无止境的互相等待。
全栈程序员站长
2022/09/09
6220
C++并发实战19:lock free编程
C++关键字new和delete与C语言的malloc和free函数
在C语言中想要在堆上申请内存空间可以使用malloc一族的函数。而释放申请的空间需要使用free函数。
zy010101
2020/04/08
1.2K0
MySQL 相关子查询
本文示例 SQL 中的表,都来自于官方提供的测试数据库 sakila,下载链接如下:https://downloads.mysql.com/docs/sakila-db.tar.gz
csch
2023/05/24
5770
MySQL 相关子查询
pytorch中与维度相关的函数、方法
多个tensor向量在某个维度上进行堆叠。注意的是:stack只是torch的函数。
木又AI帮
2020/05/20
1K0
DAX中与计数相关的聚合函数
不问花开几许,只愿浅笑安然 除了求和,另一个日常工作中最常用到的聚合方式应该是计数了。DAX提供了一系列关于计数的函数。他们可以帮助我们计算表中有多少行或者某个值出现了多少次。 DAX中包含的计数函数有: COUNT()函数,对列中值的数量进行计数,除了布尔型; COUNTA函数,对列中值的数量进行计数,包含布尔型; COUNTBLANK()函数,返回列中空单元格的计数; COUNTROWS()函数,返回表中行的计数; DISTINCTCOUNT()函数,返回列中值的不重复计数,包含空单元格。 DISTI
博文视点Broadview
2023/04/04
4.2K0
DAX中与计数相关的聚合函数
Linux中几个与文档相关的命令
一、介绍 本文将介绍几个与文档相关的命令 软件环境: 物理机 Windows 8.0 虚拟机 VMware Workstation 12 Linux系统 CentOS 7.3 二、命令cat 命令ca
Zoctopus
2018/06/04
1.1K0
【DB笔试面试613】在Oracle中,和子查询相关的查询转换有哪些?
和NOT EXISTS类似,也选择了哈希连接,只不过是HASH JOIN ANTI NA。这里的NA,实际表示Null-Aware的意思,在11g及以后的版本中,Oracle增加了对空值敏感的反关联的支持。
AiDBA宝典
2019/09/29
4.6K0
sql server创建数据库与相关查询操作
一般用来操作sql server的客户端选择的是微软自带的客户端。 我是在官网上下载的develop版本 创建操作 CREATE DATABASE TestData ON PRIMARY
gzq大数据
2021/07/13
1.1K0
gRPC C++相关
有关gRPC的C++使用可以参考官方文档:https://grpc.io/docs/languages/cpp/
ccf19881030
2020/11/24
4660
gRPC C++相关
Linux中的几个命令--top、free、uniq
Linux top命令用于实时显示 process 的动态,当我们在命令框中敲入top命令然后回车之后,可以看到如下输出:
AsiaYe
2019/11/06
2.8K0
Linux中的几个命令--top、free、uniq
C++ 中 auto 与 decltype 的用法与区别
最近在恶补 C++ 知识的时候,学习到了一些 C++11 标准的新特性,利用这些新特性,我们能够更快地提高编程效率,从而实现我们的目标,在此特意记下学习过程中所学习到的一些东西,方便日后的回顾和复习。
Angel_Kitty
2019/05/07
2.2K0
C++ 中 auto 与 decltype 的用法与区别
C++中int与string的转化
int本身也要用一串字符表示,前后没有双引号,告诉编译器把它当作一个数解释。缺省情况下,是当成10进制(dec)来解释,如果想用8进制,16进制,怎么办?加上前缀,告诉编译器按照不同进制去解释。8进制(oct)—前缀加0,16进制(hex)—前缀加0x或者0X。
Enjoy233
2019/03/05
8210

相似问题

C++中与内存管理相关的查询

40

从设计模式获取与malloc相关的错误: malloc / free /malloc/ free

21

与C++中的指针相关

20

c++相关查询中的类原型

11

与活动相关的查询

23
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文