c++棧內(nèi)存和堆內(nèi)存的基本使用小結(jié)
c++棧內(nèi)存和堆內(nèi)存的基本使用
#include <iostream>
// 定義一個簡單的結(jié)構(gòu)體
struct Person {
std::string name;
int age;
};
int main() {
// 棧內(nèi)存分配
int a = 10; // 基本數(shù)據(jù)類型的棧內(nèi)存分配
Person person; // 結(jié)構(gòu)體的棧內(nèi)存分配
person.name = "John";
person.age = 30;
std::cout << "Stack memory usage:" << std::endl;
std::cout << "a = " << a << std::endl;
std::cout << "Person name: " << person.name << ", age: " << person.age << std::endl;
// 堆內(nèi)存分配
int* p = new int; // 基本數(shù)據(jù)類型的堆內(nèi)存分配
*p = 20;
Person* personPtr = new Person; // 結(jié)構(gòu)體的堆內(nèi)存分配
personPtr->name = "Alice";
personPtr->age = 25;
std::cout << "Heap memory usage:" << std::endl;
std::cout << "*p = " << *p << std::endl;
std::cout << "PersonPtr name: " << personPtr->name << ", age: " << personPtr->age << std::endl;
// 釋放堆內(nèi)存
delete p;
delete personPtr;
return 0;
}
動態(tài)數(shù)組的使用和內(nèi)存管理
#include <iostream>
int main() {
// 動態(tài)數(shù)組的堆內(nèi)存分配
int size = 5;
int* array = new int[size];
// 初始化數(shù)組
for (int i = 0; i < size; ++i) {
array[i] = i * 10;
}
// 打印數(shù)組
std::cout << "Dynamic array:" << std::endl;
for (int i = 0; i < size; ++i) {
std::cout << "array[" << i << "] = " << array[i] << std::endl;
}
// 釋放堆內(nèi)存
delete[] array;
return 0;
}
內(nèi)存泄漏示例及其解決方案
#include <iostream>
void memoryLeakExample() {
int* leakArray = new int[100]; // 這個數(shù)組沒有被釋放,造成內(nèi)存泄漏
// 正確的處理方式
delete[] leakArray;
}
int main() {
// 調(diào)用內(nèi)存泄漏示例
memoryLeakExample();
return 0;
}
智能指針的使用
C++11引入了智能指針,可以自動管理內(nèi)存,避免內(nèi)存泄漏。
#include <iostream>
#include <memory> // 需要包含這個頭文件
class MyClass {
public:
MyClass() {
std::cout << "Constructor called" << std::endl;
}
~MyClass() {
std::cout << "Destructor called" << std::endl;
}
void display() {
std::cout << "Display method called" << std::endl;
}
};
int main() {
// 使用unique_ptr
std::unique_ptr<MyClass> ptr1(new MyClass());
ptr1->display();
// 使用shared_ptr
std::shared_ptr<MyClass> ptr2 = std::make_shared<MyClass>();
ptr2->display();
return 0;
}到此這篇關(guān)于c++棧內(nèi)存和堆內(nèi)存的基本使用小結(jié)的文章就介紹到這了,更多相關(guān)c++棧內(nèi)存和堆內(nèi)存內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語言詳細(xì)講解通過遞歸實(shí)現(xiàn)掃雷的展開
windows自帶的游戲《掃雷》是陪伴了無數(shù)人的經(jīng)典游戲,本文將利用C語言實(shí)現(xiàn)這一經(jīng)典的游戲,文中的示例代碼講解詳細(xì),感興趣的可以學(xué)習(xí)一下2022-05-05
深入二叉樹兩個結(jié)點(diǎn)的最低共同父結(jié)點(diǎn)的詳解
本篇文章是對二叉樹兩個結(jié)點(diǎn)的最低共同父結(jié)點(diǎn)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
基于Matlab實(shí)現(xiàn)離散系統(tǒng)分岔圖的繪制
這篇文章主要介紹了如何利用Matlab實(shí)現(xiàn)離散分岔圖的繪制,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Matlab有一定的幫助,需要的可以參考一下2022-04-04
c++回溯法解決1到9之間插入加減或空使運(yùn)算結(jié)果為100
編寫一個在1,2,…,9(順序不能變)數(shù)字之間插入+或-或什么都不插入,使得計算結(jié)果總是100的程序,并輸出所有的可能性。例如:1 + 2 + 34 – 5 + 67 – 8 + 9 = 1002021-10-10
Qt解析XML的三種常見方法實(shí)現(xiàn)與比較
XML是一種可擴(kuò)展的標(biāo)記語言,用于存儲和傳輸結(jié)構(gòu)化數(shù)據(jù),廣泛應(yīng)用于配置、數(shù)據(jù)交換和Web服務(wù)等領(lǐng)域,本文主要介紹了Qt解析XML的三種常見方法實(shí)現(xiàn)和性能對比,需要的可以了解下2025-06-06
C語言數(shù)據(jù)結(jié)構(gòu)與算法之排序總結(jié)(一)
這篇文章主要介紹了數(shù)據(jù)結(jié)構(gòu)與算法中的插入類和交換類的各種排序,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2021-12-12
Unity3D實(shí)現(xiàn)經(jīng)典小游戲Pacman
這篇文章主要介紹了基于Unity3D制作一做個經(jīng)典小游戲Pacman,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Unity3D有一定的幫助,感興趣的小伙伴可以了解一下2021-12-12
C++數(shù)據(jù)結(jié)構(gòu)與算法之哈夫曼樹的實(shí)現(xiàn)方法
這篇文章主要介紹了C++數(shù)據(jù)結(jié)構(gòu)與算法之哈夫曼樹的實(shí)現(xiàn)方法,簡單說明了哈夫曼樹的原理,并結(jié)合具體實(shí)例形式分析了C++實(shí)現(xiàn)哈夫曼樹的相關(guān)操作技巧,需要的朋友可以參考下2017-11-11

