动态内存是由程序员手动申请和释放内存的方式,存放在内存的堆区heap(链表)

⚠️注意: 不同风格的动态内存申请和释放不能混用 malloc用free、而new用delete

⚠️注意: 动态内存申请后需要及时释放,否则会造成内存泄露

C风格:malloc-free

  1. #inclued <stdio.h>
  2. int main()
  3. {
  4. int *p = malloc(sizeof(int)); //定义并分配动态内存
  5. *p = 10; //给指针赋值
  6. printf("%d", p); //输出地址
  7. printf("%d", *p); //输出值
  8. free(p); //释放动态内存
  9. }
  10. /*
  11. 注:c风格的动态内存分配,在c++中使用可能导致编译器警告
  12. 可以使用以下方式消除警告
  13. */
  14. #inclued <iostream>
  15. using namespace std;
  16. int main()
  17. {
  18. int *p = malloc(sizeof(int)); //定义指针并寻找一块 sizeof(int)大小的的内存-的地址
  19. if(p)*p = 10; //给指针赋值(在使用前用if判断)
  20. printf("%d", p); //输出地址
  21. printf("%d", *p); //输出值
  22. free(p); //释放内存
  23. return 0;
  24. }

C++风格:new-delete

  1. #inclued <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. int *p = new int; //定义指针并寻找一块 int 大小的的内存-的地址
  6. *p = 10; //给指针赋值
  7. cout << p << endl; //输出地址
  8. cout << *p << endl; //输出值
  9. delete p; //释放内存
  10. return 0;
  11. }