IT评测·应用市场-qidao123.com技术社区

标题: C/C++ 恨透了 double free or corruption [打印本页]

作者: 东湖之滨    时间: 2023-4-4 14:13
标题: C/C++ 恨透了 double free or corruption
*以下内容为本人的学习笔记,如需要转载,请声明原文链接微信公众号「ENG八戒」https://mp.weixin.qq.com/s/IwSVImp5cOB3gZbaf0YiPw
写过 C/C++ 的都知道,内存允许程序员自主分配,用完了这些资源也得释放出来,这种在系统运行过程中动态申请的内存,称为动态内存。
常言道,借东西好借好还,下次再借也不难,但是有的人有时候还真的忘了还回去。这要是发生在程序运行时,申请的内存没正常释放,没管理好,就避免不了会面对内存报错的问题。
内存都允许你自由操纵了,灵活性是真的大,恰恰这也是它的弊端。
今天就来聊聊 C/C++ 的报错 double free or corruption
怎么分配和释放内存?

C 语言提供了两个函数用于分配和释放内存 malloc 和 free,需要引用头文件 。 是 C 标准库头文件  为 C 语言程序员提供可靠、高效的函数,以实现动态内存分配、数据类型转换、伪随机数生成、过程控制、搜索和排序、数学以及多字节或宽字符函数,还包括一些常用常数,目的是促进组织和平台间的代码标准化。
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. int main()
  4. {
  5.     int *ptr = malloc(sizeof(int));
  6.     *ptr = 100;
  7.     printf("%d", *ptr);
  8.     free(ptr);
  9.     return 0;
  10. }
复制代码
输出:
  1. 100
复制代码
调用 malloc 会分配一块内存空间,并将这块内存空间的首地址返回。调用时,需要传入目标内存空间的大小,单位按照字节(Byte)算,而返回的地址数据类型是 void*,所以,根据目标空间的具体用途转换即可。
这块内存空间在分配之后还属于未初始化的状态,如果对内存空间的使用比较复杂,建议先用 memset 初始化一下。
内存空间使用完,需要使用 free 释放掉,避免闲置浪费,否则就算是内存泄漏了。内存泄露会直到程序进程结束为止。
在其它的高级语言里,比如 Java、Python 等,出于内存安全的考虑,都不会允许用户自己管理内存,而 C++ 是个例外,这可能来自于 C 语言的传承。
C++ 里同样提供了 malloc 和 free,但是引用的头文件变成了 。 是  增强版,而且所有内容都在命名空间内声明,所以使用前必须通过命名空间引用。
另外 C++ 还提供了两个额外的操作符用于分配和释放内存,分别是 new 和 delete。
[code]#include using namespace std;int main(){    int *ptr = new int;    *ptr = 100;    cout




欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/) Powered by Discuz! X3.4