动态内存管理(下)

简介: 动态内存管理(下)

@TOC
感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接
🐒🐒🐒个人主页
🥸🥸🥸C语言
🐿️🐿️🐿️C语言例题
🐣🐓🏀python

常见的动态内存的错误

对NULL指针的解引用操作

void test()
{
   
    int* p = (int*)malloc(INT_MAX / 4);
    *p = 20;//如果p的值是NULL,就会有问题
    free(p);
}

对动态开辟空间的越界访问

void test()
{
   
    int i = 0;
    int* p = (int*)malloc(10 * sizeof(int));
    if (NULL == p)
    {
   
        exit(EXIT_FAILURE);
    } f
        or (i = 0; i <= 10; i++)
    {
   
        *(p + i) = i;//当i是10的时候越界访问
    } f
        ree(p);
}

对非动态开辟内存使用free释放

 void test()
{
   
    int a = 10;
    int *p = &a;
    free(p);//ok?
}

使用free释放⼀块动态开辟内存的⼀部分

void test()
{
   
    int *p = (int *)malloc(100);
    p++;
    free(p);//p不再指向动态内存的起始位置
}

对同⼀块动态内存多次释放

void test()
{
   
    int *p = (int *)malloc(100);
    free(p);
    free(p);//重复释放
}

动态开辟内存忘记释放(内存泄漏)

void test()
{
   
    int *p = (int *)malloc(100);
    if(NULL != p)
    {
   
        *p = 20;
    }
} 
int main()
{
   
    test();
    while(1);
}

忘记释放不再使用的动态开辟的空间会造成内存泄漏。
切记:动态开辟的空间⼀定要释放,并且正确释放

目录
相关文章
|
2月前
|
存储 缓存 C语言
【c++】动态内存管理
本文介绍了C++中动态内存管理的新方式——`new`和`delete`操作符,详细探讨了它们的使用方法及与C语言中`malloc`/`free`的区别。文章首先回顾了C语言中的动态内存管理,接着通过代码实例展示了`new`和`delete`的基本用法,包括对内置类型和自定义类型的动态内存分配与释放。此外,文章还深入解析了`operator new`和`operator delete`的底层实现,以及定位new表达式的应用,最后总结了`malloc`/`free`与`new`/`delete`的主要差异。
62 3
|
3月前
|
程序员
动态内存管理
动态内存管理
20 0
|
7月前
|
编译器 C语言
动态内存管理(1)
动态内存管理(1)
59 4
|
7月前
|
存储 Linux C语言
5.C++动态内存管理(超全)
5.C++动态内存管理(超全)
|
8月前
|
安全 C++ 开发者
c++动态内存管理(二)
c++动态内存管理(二)
149 0
|
8月前
|
程序员 C语言 C++
详解动态内存管理!
详解动态内存管理!
|
编译器 文件存储 数据库
Day_17> 动态内存管理
Day_17> 动态内存管理
|
C语言
动态内存管理(上)
动态内存管理(上)
58 0
|
编译器 C语言
详解动态内存管理(一)
详解动态内存管理
99 0
详解动态内存管理(一)

热门文章

最新文章