[草稿][C语言][内存分配]常见内存错误

1. 使用未分配成功的内存

解决案:

①在使用内存前检查指针是否为NULL

②参数是指针时,在函数入口处用assert进行判断

③如果指针指向动态申请的内存,用if进行容错处理

2. 使用分配成功,但未初始化的内存

解决案:

①定义数组后一定要初始化

3. 内存泄漏

解决案:

①new/malloc和delete/free一定要成对出现

4. 使用已被释放的内存

解决按:

①不要返回指向栈内存的指针或引用

②释放内存后,将指针置为NULL

时间: 2025-01-13 16:56:03

[草稿][C语言][内存分配]常见内存错误的相关文章

c/c++深入篇之内存分配与内存对齐的探讨

 不明白内存分配和指针的可以看看,其实这本是我们老师留的一个操作系统科技小论文作业,不知道写什么,干脆把以前收藏的经典C内存分配的文章整理并修改了一下.       此文章有2个用处,1:这是个小论文,格式完整,大家可以复制回去交作业:2:这是整理的经典C内存分配小教程(也加了些我自己的观点),不明白内存分配的可以看看. 还有很重要的一个问题:      这篇文章引用的很多内容我也不知道究竟是出自谁手,知道作者是谁的麻烦告诉下,我好谢谢他.(记得都是csdn里面找的) tag: 操作系统 论

内存分配与内存管理的一些理解

内存分配方式与内存分配算法 内存分配方式有两种,连续内存分配方式和离散内存分配方式.不同的分配方式又有不同的分配算法. 内存分配算法,其实就是:有一大块空闲的资源,如何合理地分配资源?内存分配的思想可以用到很多其他的领域. ①连续内存分配方式 1)固定分区分配 将内存划分成若干个固定大小的块.将程序装入块中即可.内存划分成各个块之后,块大小不再改变.当然,划分块的方式有:所有的块大小相等:划分的块大小不相等. 这种方式,在实际的内存分配之前,就已经知道了所有的内存块大小了. 2)动态分区分配 需

Java内存分配和内存管理

首先是概念层面的几个问题: Java中运行时内存结构有哪几种? Java中为什么要设计堆栈分离? Java多线程中是如何实现数据共享的? Java反射的基础是什么? 然后是运用层面: 引用类型变量和对象的区别? 什么情况下用局部变量,什么情况下用成员变量? 数组如何初始化?声明一个数组的过程中,如何分配内存? 声明基本类型数组和声明引用类型的数组,初始化时,内存分配机制有什么区? 在什么情况下,我们的方法设计为静态化,为什么?(上次胡老师问文奇,问的哑口无言,当时想回答,却老感觉表述不清楚,这里

内存分配--静态内存、栈和堆

可编程内存在基本上分为这样的几大部分:静态存储区.堆区和栈区.他们的功能不同,对他们使用方式也就不同. 静态存储区:内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.它主要存放静态数据.全局数据和常量. 栈区:在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放.栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限. 堆区:亦称动态内存分配.程序在运行的时候用malloc或new申请任意大小的内存,程序员自己负责在适当

垃圾收集器与内存分配策略-内存分配与回收策略

如何去给对象分配内存?大方向讲,就是在堆上分配(但也可能经过JIT编译后被拆散为标量类型并间接地在栈上分配) ①对象优先在Eden分配 大多数条件下,对象在Eden中分配,当Eden内存不够的时候,虚拟机将发起一次Minor GC. private static final int _1MB=1024*1024; /** * VM参数:-verbose:gc -Xms20M -Xmx20M -Xmn10M (限制了java堆大小为20MB,新生代10MB,老年代10MB)-XX:+PrintGC

动态内存分配连续内存空间的二维数组

可以直接使用一维数组来模拟二维数组,下面的代码就是在此基础上,用一个二级指针指向一维数组的相应地方,详见代码 #include <stdio.h> #include <malloc.h> int main() { int row,col,i,j,n=0; row=col=3; //malloc连续内存的二维数组 int **arr=(int**)malloc(row*sizeof(int*));//分配二维数组 arr[0]=(int*)malloc(row*col*sizeof(

转:内存分配方式及常见错误

内存操作对于程序开发人员来说,永远是一块雷区.在这片区域,总是不断的埋雷.排雷,而且往往是排雷花了非常大的代价.记得在公司实习时,有大概2个星期的时间,team的几个人去排雷——有地方发生了memory leak! 而以我现在的认知来看,只有极少数的programer敢拍着胸脯说,非常熟悉内存操作,手到擒来不会排雷.针对这个情况,我要求自己在尽量去探索,以求少埋雷.甚至不埋雷(这是一个很大的挑战).以下内容摘自<高质量C++/C编程指南>(作者: 林锐 博士),以警醒自己.更多详细.深入的东西

[转载]C语言程序的内存分配方式

"声明一个数组时,编译器将根据声明所指定的元素数量为数量为数组保留内存空间."其实就是编译器在编译的过程中,会加入几条汇编指令在程序里处理内存分配,并不是说编译时就分配了内存,不要理解错了. ------------------- 1.内存分配方式 内存分配方式有三种: [1]从静态存 储区域分配.内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量,static变量. [2]在栈上创建. 在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结

C++内存分配方式——小结

1 内存分配方式 内存分配方式有如下三种: 从静态存储区域分配.内存在程序编译的时候就分配好了,这些内存在整个程序运行期间都存在,如全局变量.static变量等等. 在堆栈上分配.在函数执行期间,函数形参.函数内局部变量的存储单元都置于堆栈上,函数调用结束后自动从堆栈上释放. 从堆(heap)或自由存储空间分配,也叫动态内存分配.程序运行期间使用malloc()或new申请内存,使用free()或delete释放内存. 一般的原则是:如果使用堆栈和静态存储就能够满足应用需求,就不要使用动态存储.