C/C++動態配置記憶體_記憶體洩漏介紹
C/C++動態配置記憶體_記憶體洩漏介紹
資料來源: https://mp.weixin.qq.com/s/WvAsjLhgGlRJsxFPLAI3lw
C code
/*
https://mp.weixin.qq.com/s/WvAsjLhgGlRJsxFPLAI3lw
https://www.tutorialspoint.com/compile_c_online.php
*/
#include <stdio.h>
int main()
{
char arr_char[1024*1000000];
arr_char[0] = '0';
}
/*
$gcc -o main *.c
$main
/usr/bin/timeout: the monitored command dumped core
sh: line 1: 182320 Segmentation fault /usr/bin/timeout 10s main
*/
/*
https://mp.weixin.qq.com/s/WvAsjLhgGlRJsxFPLAI3lw
https://www.tutorialspoint.com/compile_c_online.php
*/
#include <stdio.h>
#include<string.h>
#include <malloc.h>
int main()
{
char *p1 = (char *)malloc(1024*1000000);
strcpy(p1, "这里是堆区");
printf("%s\n", p1);
free(p1);
}
/*
$gcc -o main *.c
$main
这里是堆区
*/
© 2021 GitHub, Inc.
C++ code
//https://mp.weixin.qq.com/s/WvAsjLhgGlRJsxFPLAI3lw
//https://www.tutorialspoint.com/compile_cpp_online.php
#include <iostream>
using namespace std;
class Babe
{
public:
Babe()
{
cout << "Create a Babe to talk with me" << endl;
}
~Babe()
{
cout << "Babe don\'t Go away,listen to me" << endl;
}
};
int main()
{
int *a = new int[10];
for(int i=0;i<10;i++)
{
a[i]=i;
cout<< a[i]<<"\t";
}
cout<<"\n";
delete a; //方式1
//delete[] a; //方式2
Babe* pbabe = new Babe[3];
delete []pbabe;//會GG的寫法-> delete pbabe;
pbabe = new Babe[3];
delete[] pbabe;
return 0;
}
/*
$g++ -o main *.cpp
$main
0 1 2 3 4 5 6 7 8 9
Create a Babe to talk with me
Create a Babe to talk with me
Create a Babe to talk with me
Babe don't Go away,listen to me
Babe don't Go away,listen to me
Babe don't Go away,listen to me
Create a Babe to talk with me
Create a Babe to talk with me
Create a Babe to talk with me
Babe don't Go away,listen to me
Babe don't Go away,listen to me
Babe don't Go away,listen to me
*/
© 2021 GitHub, Inc.
圖文版完整內容:
2 thoughts on “C/C++動態配置記憶體_記憶體洩漏介紹”
C/C++ 記憶體洩漏 種類 簡易文字整理
01.動態配置記憶體,申請後忘記釋放
02.檔案開啟,忘記關閉 [很難察覺]
03.類別使用物件指標動態配置建立後忘記釋放物件
操作建議
01.對於所有指標 變數 用完即立刻釋放對應記憶體
02.如果無法在單一函數類使用完畢該變數操作,就應該將變數宣告在全域變數之中,如此才能用完即立刻釋放對應記憶體
03. 善用IDE 經常檢查指標變數的 配置/釋放 記憶體指令應該隨時保持成對狀態