含有这种错误的函数每被调用一次就丢失一块内存。刚开始时系统的内存充足,你看不到错误。终有一次程序突然死掉,系统出现提示:内存耗尽
动态内存的申请与释放必须配对,程序中malloc与free的使用次数一定要相同,否则肯定有错误(new/delete同理)
(5)释放了内存却继续使用它
(11)程序中的对象调用关系过于复杂,实在难以搞清楚某个对象究竟是否已经释放了内存,此时应该重新设计数据结构,从根本上解决对象管理的混乱局面
(12)函数的return语句写错了,注意不要返回指向“栈内存”的“指针”或者“引用”,因为该内存在函数体结束时被自动销毁
(13)使用free或delete释放了内存后,没有将指针设置为NULL。导致产生“野指针”
【规则1】用malloc或new申请内存之后,应该立即检查指针值是否为NULL。防止使用指针值为NULL的内存
【规则2】不要忘记为数组和动态内存赋初值。防止将未被初始化的内存作为右值使用。
【规则3】避免数组或指针的下标越界,特别要当心发生“多1”或者“少1”操作
【规则4】动态内存的申请与释放必须配对,防止内存泄漏
【规则5】用free或delete释放了内存之后,立即将指针设置为NULL,防止产生“野指针”
3、指针与数组的对比
C++/C程序中,指针和数组在不少地方可以相互替换着用,让人产生一种错觉,以为两者是等价的
数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变
指针可以随时指向任意类型的内存块,它的特征是“可变”,所以我们常用指针来操作动态内存。指针远比数组灵活,但也更危险
分享到:
相关推荐
C#中堆和栈的区别分析 C# 中堆和栈的区别分析是理解 .NET 框架中内存管理的关键。堆和栈是两个基本元素,组成我们 C# 程序的运行环境。在这个知识点中,我们将详细介绍堆和栈的概念、类型变量、分配机制、生命周期...
### 堆和栈的详细分析 #### 一、引言 在计算机科学与软件工程领域,堆(heap)和栈(stack)是两种极为重要的内存管理机制。这两种内存分配方式各自具有独特的特点和用途,对于理解程序运行时内存管理至关重要。 #...
### 堆和栈总结 #### 一、堆栈概念概览 在计算机科学中,堆和栈是非常重要的数据结构,它们在程序运行时管理内存的分配和使用方面发挥着核心作用。对于Java语言而言,堆和栈的概念尤为重要,因为JVM如何管理和使用...
二、堆和栈的理论知识 2.1 申请方式 栈:由系统自动分配。例如,声明在函数中一个局部变量 int b; 系统自动在栈中为 b 开辟空间。 堆:需要程序员自己申请,并指明大小,在 C 中使用 malloc 函数,如 p1 = (char *...
二、堆和栈的理论知识 2.1 申请方式 * 栈:由系统自动分配。例如,声明在函数中一个局部变量 int b; 系统自动在栈中为 b 开辟空间。 * 堆:需要程序员自己申请,并指明大小。在 C 中使用 malloc 函数,如 p1 = ...
### Java中的堆和栈 #### 一、概述 在Java编程语言中,内存管理是非常重要的一个概念。Java程序运行时的内存主要分为两大区域:**堆内存**和**栈内存**。这两种内存区域有着各自独特的用途和管理机制,对理解和...
"Java 堆和栈的区别" Java 堆和栈是 Java 中的两种内存管理机制,它们都是 Java 用来在 RAM 中存放数据的地方。但是,它们有很多不同之处。 Java 堆是一个运行时数据区,类的对象从中分配空间。这些对象通过 new、...
堆和栈的区别 堆和栈是计算机内存管理中两个重要的概念,它们都是程序运行时的内存分配方式,但是它们之间有着明显的区别。 1. 预备知识—程序的内存分配 程序的内存分配可以分为五个部分:栈区、堆区、全局区、...
### 操作系统中堆和栈的区别 #### 一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存被细分为以下几个关键部分: 1. **栈区(Stack)**:这部分内存是由编译器自动管理的,主要用于存放函数的参数值...
### 堆与栈的深度解析 在编程领域,尤其是对于C/C++程序员...堆和栈在内存管理中各司其职,理解它们的区别有助于我们编写更高效、更安全的代码。正确使用堆和栈,避免不必要的内存泄漏和溢出,是每位程序员的基本功。
### 堆和栈的区别详解 #### 一、引言 在编程中,了解不同内存区域的特点及其使用方法是非常重要的。本文将详细解释堆和栈这两种常见内存区域的区别,包括它们的基本概念、特点以及应用场景。 #### 二、基础知识:...
### 详解Java堆和栈 #### 一、引言 在Java编程中,理解堆(Heap)和栈(Stack)的概念及其区别对于程序员来说至关重要。本文将深入剖析这两个概念,并探讨它们之间的差异以及如何影响程序的运行。 #### 二、Java...
#### 二、堆和栈的详细对比 ##### 2.1 申请方式 - **栈**:由系统自动分配,无需程序员干预,例如函数内的局部变量。 - **堆**:需要程序员通过`malloc()`或`new`显式地申请和释放,如`p1=(char*)malloc(10);`或`...
#### 二、堆和栈的具体差异 1. **申请方式**: - **栈**:系统自动分配,如函数内的局部变量。 - **堆**:需程序员显式申请,如通过`malloc()`或`new`。 2. **申请后系统的响应**: - **栈**:若栈内有足够空间...
在编程语言中,堆和栈是两种不同的内存管理机制,它们各自有特定的用途和特点。以下是关于堆和栈的详细区别和相关知识点: 1. **栈(Stack)**: - 栈是一种线性数据结构,具有后进先出(LIFO)的特点。 - 在C#和...
在计算机领域,堆栈是一个不容忽视的概念,我们编写的...C语言程序经过编译连接后形成编译、连接后形成的二进制映像文件由栈,堆,数据段(由三部分部分组成:只读数据段,已经初始化读写数据段,未初始化数据段即BBS)
《堆和栈的区别》 堆和栈是编程中两种重要的内存管理机制,它们在程序运行过程中扮演着不可或缺的角色。理解堆和栈的区别是每个程序员必须掌握的基础知识。 首先,我们来看一下程序内存的划分。一个C/C++编译的...
#### 二、堆和栈的理论知识 接下来,我们将从几个角度详细对比堆和栈的不同: 1. **申请方式**: - **栈**:由系统自动分配,例如函数内的局部变量。 - **堆**:需要程序员手动申请,使用 `malloc` 或 `new` ...