动态内存分配— —常见错误总结

简介: 动态内存分配— —常见错误总结

1. 申请的内存多次释放

2. 内存泄漏

3. 释放的内存不是申请时的地址

4. 释放空指针

5. 释放一个内存块,但继续引用其中的内容

6. 越界访问

以下是代码解释:

// demo 9-9.c
#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
  int* p = new int[18];
  p[0] = 0;
  char* p1 = NULL;
  //1.申请的内存多次释放, 程序出现异常
  //... ...
  //... ...
  //delete[] p;//只允许一次释放
  //... ...
  //... ...
  //delete[] p;
  //2. 忘记 delete,内存泄漏
  /*
  do
  {
  }while(1==1);
  */
  //3.释放的内存不是申请时的地址
  /*for(int i=0; i<18; i++)
  {
    cout<<*(p++)<<endl;
  }
  delete [] p;*/
  //4.释放空指针
  // ... ...
  /*if(1==0)
  { //比如文件能打开的情况
    p1 = new char[2048];
  }
  ... ...
  delete p1;
  */
  //5.释放一个内存块,但继续引用其中的内容
  /*delete[] p;
  // ...继续码代码...
  p[0]= '\0';//绝对禁止
  */
  //6.越界访问
  memset(p, 0, 18 * sizeof(int));
  for (int i = 0; i < 18; i++) 
  {
    cout << *(p++) << endl;
  }
  //误判
  for (int i = 0; i < 18; i++) 
  {
    cout << *(p++) << endl;
  }
  cout << "come here!" << endl;
  system("pause");
  return 0;
}


相关文章
|
21天前
|
安全 C语言
【C语言】如何规避野指针
【C语言】如何规避野指针
24 0
|
9天前
|
存储 安全 编译器
常见的动态内存错误总结(一)
该文讨论了C语言中与动态内存和指针相关的常见问题。首先,强调了对NULL指针解引用的危险性,示例展示了未检查动态内存分配结果导致的问题,并指出`free()`函数传入NULL是安全的。接着,通过代码解释了指针传值调用时的陷阱,说明了为何直接调用`GetMemory(str)`无法改变`Test`函数中`str`的值。文章还提到了动态内存的越界访问和非法释放,包括释放非动态内存、只释放内存的一部分以及重复释放同一块内存的错误情况。最后,建议在释放内存后将指针设为NULL以防止后续误用。
30 1
|
9天前
|
编译器
常见的动态内存错误总结(二)
本文总结了两种常见的动态内存错误:内存泄漏和野指针。在示例代码中,内存泄漏发生于动态分配内存后未进行释放,导致程序结束时内存无法回收。野指针问题出现在函数返回栈上创建的变量地址,由于栈空间销毁,指针变成无效,访问时会导致错误。文章强调了使用`static`修饰局部变量可以延长其生命周期以避免野指针,以及释放内存后应将指针置`NULL`以防止后续误用。
27 3
|
11月前
|
编译器 C语言
【C语言】动态内存分配malloc,realloc等函数使用和常见错误(上)
【C语言】动态内存分配malloc,realloc等函数使用和常见错误(上)
57 0
|
6月前
|
C++
C和C++动态内存分配及内存注意事项(重要)
C和C++动态内存分配及内存注意事项(重要)
38 0
|
10月前
|
编译器
动态内存函数和常见的动态内存错误
动态内存函数和常见的动态内存错误
|
10月前
|
编译器 C语言
常见的动态内存的错误 和 柔性数组
✅<1>主页:C语言的前男友 📃<2>知识讲解:常见的动态内存的错误,以及柔性数组(C99) 🔥<3>创作者:C语言的前男友 ☂️<4>开发环境:Visual Studio 2022 💬<5>前言:之前我们说过动态内存管理的知识,今天我们来见识一下,动态内存管理常见的错误。帮助大家对动态内存管理有更深入的理解。
|
11月前
|
C语言
【C语言】动态内存分配malloc,realloc等函数使用和常见错误(下)
【C语言】动态内存分配malloc,realloc等函数使用和常见错误(下)
97 0
|
12月前
|
C语言
【动态内存管理】动态内存函数简析
【动态内存管理】动态内存函数简析
67 0
|
12月前
|
存储 编译器 C语言
【C语言进阶】动态内存管理详解与常见动态内存错误以及柔性数组使用与介绍
【C语言进阶】动态内存管理详解与常见动态内存错误以及柔性数组使用与介绍

热门文章

最新文章