系列文章目录
文章目录
一、动态内存开辟的定义
- 系列文章目录
- 前言
- 一、动态内存开辟的定义
- 二、动态内存开辟错误
- 1.对NULL指针的解引用操作
- 2.对开辟空间的越界访问
- 3.对非动态开辟的空间使用free释放
- 4.使用free释放一块动态内存开辟的空间
- 5.对同一块内存多次释放
- 6.对开辟的内存空间忘记释放,内存泄漏问题
- 二、动态内存开辟错误经典笔试题
- 1.空指针传参,类似于值传递
- 2.局部变量和形式参数存在于栈上
- 3.内存泄露问题
- 4.非法访问内存问题
- 总结
所谓动态内存分配(Dynamic Memory Allocation)是指在程序执行的过程中动态地分配或者回收存储空间的分配内存的方法。动态内存分配不象数组等静态内存分配方法那样需要预先分配存储空间,而是由系统根据程序的需要即时分配,且分配的大小就是程序要求的大小。 我们在定义数组时,需要知道数组的大小,当我们不确定数组大小时需要定义足够大的数组来存放数据,这样造成了空间的浪费,一旦空间不够用时又要重新修改程序,这样的方式是静态内存分配,使用动态内存分配可以很好的解决这一问题。
二、动态内存开辟错误 1.对NULL指针的解引用操作代码如下(示例):
动态内存错误
1.对NULL指针进行解引用操作
void test()
{
int *p = (int *)malloc(INT_MAX/4);
*p = 20;//如果p的值是NULL,就会有问题
free(p);
}
正确代码:
int main()
{
int* pa = (int*)malloc(INT_MAX);
if (pa == NULL)//判断pa是否为空
{
printf("开辟失败!\n");
}
else
{
*pa = 0;
free(pa);
pa = NULL;
}
return 0;
}
2.对开辟空间的越界访问
代码如下(示例):
int main()
{
int* pa =(int*) malloc(10 * sizeof(int));
if (pa == NULL)
{
printf("开辟失败!\n");
}
else
{
int i = 0;
for (i = 0; i
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?