当前位置: 首页 > news >正文

c++栈内存和堆内存的基本使用

c++栈内存和堆内存的基本使用

#include <iostream>// 定义一个简单的结构体
struct Person {std::string name;int age;
};int main() {// 栈内存分配int a = 10; // 基本数据类型的栈内存分配Person person; // 结构体的栈内存分配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;// 堆内存分配int* p = new int; // 基本数据类型的堆内存分配*p = 20;Person* personPtr = new Person; // 结构体的堆内存分配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;// 释放堆内存delete p;delete personPtr;return 0;
}

动态数组的使用和内存管理

#include <iostream>int main() {// 动态数组的堆内存分配int size = 5;int* array = new int[size];// 初始化数组for (int i = 0; i < size; ++i) {array[i] = i * 10;}// 打印数组std::cout << "Dynamic array:" << std::endl;for (int i = 0; i < size; ++i) {std::cout << "array[" << i << "] = " << array[i] << std::endl;}// 释放堆内存delete[] array;return 0;
}

内存泄漏示例及其解决方案

#include <iostream>void memoryLeakExample() {int* leakArray = new int[100]; // 这个数组没有被释放,造成内存泄漏// 正确的处理方式delete[] leakArray;
}int main() {// 调用内存泄漏示例memoryLeakExample();return 0;
}

智能指针的使用

C++11引入了智能指针,可以自动管理内存,避免内存泄漏。

#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_ptrstd::unique_ptr<MyClass> ptr1(new MyClass());ptr1->display();// 使用shared_ptrstd::shared_ptr<MyClass> ptr2 = std::make_shared<MyClass>();ptr2->display();return 0;
}
http://www.lryc.cn/news/397200.html

相关文章:

  • 快速入门,springboot知识点汇总
  • Ubuntu20.04系统非root用户安装GAMIT10.71
  • stm32 开发板可以拿来做什么?
  • latex英文转中文word,及一些latex相关工具分享
  • EasyOCR: 简单易用的多语言OCR工具
  • arm架构安装chrome
  • ETAS工具导入Com Arxml修改步骤
  • Apache Kylin模型构建全解析:深入理解大数据的多维分析
  • element-plus的文件上传组件el-upload
  • 等保测评视角下的哈尔滨智慧城市安全框架构建
  • Java中的数据缓存技术及其应用
  • SQL 索引
  • free第一次成功,第二次失败
  • 各种音频处理器
  • 深度学习探秘:Transformer模型跨框架实现大比拼
  • 京准电钟:云计算中NTP网络时间服务器的作用是什么?
  • Apache中使用CGI
  • 宏任务与微任务对比【前端异步】
  • Autogen和LangGraph对比
  • uniapp vue3微信小程序如何获取dom元素
  • Mongodb索引使用限制
  • 阿里云通义千问开源两款语音基座模型分别是SenseVoice和CosyVoice
  • 第11章 规划过程组(二)(11.10制订进度计划)
  • 如何在Spring Boot中集成Hibernate
  • Grind 75 | 3. merge two sorted lists
  • MyBatis(35)如何在 MyBatis 中实现软删除
  • C# 预处理器指令
  • Perl编译器架构:前端与后端的精细分工
  • 14-63 剑和诗人37 - 分布式系统中的数据访问设计
  • 大数据基础:Hadoop之MapReduce重点架构原理