当前位置:   article > 正文

C语言和C++申请内存案例_keilc语言申请内存

keilc语言申请内存

malloc 内存申请案例

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main(int argc, char const *argv[])
  4. {
  5. /*
  6. void * malloc(size_t size)
  7. size_t ==> unsigned long无符号长整型,仅支持正数使用
  8. malloc 函数接受一个参数 size,表示需要分配的字节数
  9. 分配成功返回一个指向分配内存的指针;如果分配失败,返回 NULL。
  10. void * 万能指针,可以指向任何一个空间首地址,但是系统要求,不可以通过
  11. void * 访问读取目标空间中数据内容。在使用时需要进行【强制类型转换】,
  12. 明确告知当前指针对应数据空间,按照哪一个类型进行处理。
  13. */
  14. //当前操作只是向 CPU 申请内存堆区空间,要求空间字节数为 40 个字节
  15. void *p = malloc(40);
  16. // 强制类型转换,告知 CPU当前 p 对应的地址按照 int 类型数据处理方式
  17. int *p1 = (int *)p;
  18. /*
  19. 通过 p1 操作申请的空间,CPU 通过
  20. p1 操作的对应空间每一个元素都是 int 类型
  21. */
  22. for (int i = 0; i < 40 / sizeof(int); i++)
  23. {
  24. //1.指针方式操作
  25. //*(p1 + i) = i * 2;
  26. //2.数组方式操作
  27. p1[i] = i * 2;
  28. }
  29. for (int i = 0; i < 40 / sizeof(int); i++)
  30. {
  31. // 方式一: 可以按照指针形式进行操作
  32. // printf("*(p2 + %d) = %d\n", i, *(p2 + i));
  33. // 方式二: 可以按照数组形式进行操作,当前指针形式,数组的存储数据类型为 int 类型
  34. printf("p1[%d] = %d\n", i, p1[i]);
  35. }
  36. printf("p = %p\n", p);
  37. printf("p1 = %p\n", p1);
  38. /*
  39. void free(void* ptr);
  40. free 函数是用于释放 malloc realloc calloc 申请的内存空间,需要提供给当前
  41. 函数申请空间的【首地址】,所需参数是 void * 类型,在实际使用中,可以提供任意类型
  42. 指针。
  43. free 操作将 p2 指向内存空间进行释放操作,告知系统当前内存使用完毕,可以其他程序
  44. 申请。
  45. */
  46. free (p);
  47. /*
  48. p 和 p2 原本都存储申请空间首地址,但是对应空间已经通过 free 释放
  49. 归还给系统,为了安全操作不可以通过 p 和 p2 访问原本的数据空间,重新
  50. 赋值为 NULL,防止后期使用。
  51. */
  52. p = NULL;
  53. p1 = NULL;
  54. return 0;
  55. }

calloc内存申请案例 

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main(int argc, char const *argv[])
  4. {
  5. /*
  6. calloc 案例
  7. void *calloc (size_t_num, size_t_size);
  8. 通过 calloc 函数申请内存【堆区空间】, 要求申请的每一个元素
  9. 占用内存 4 个字节,总计内存 40 个字节
  10. 同时将当前申请的内存空间首地址,强转为 int 类型,
  11. CPU 通过 p 操作对应内存空间,每一个元素都是 int 类型
  12. */
  13. int *p = (int *)calloc(10, sizeof(int));
  14. for (int i = 0; i < 10; i++)
  15. {
  16. p[i] = i + 1;
  17. }
  18. for (int i = 0; i < 10; i++)
  19. {
  20. printf("p[%d] = %d\n",i , p[i]);
  21. }
  22. //释放空间
  23. free(p);
  24. //擦除数据
  25. p = NULL;
  26. return 0;
  27. }

reaclloc 内存申请案例 

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main(int argc, char const *argv[])
  4. {
  5. // malloc 申请 40 个字节空间数据
  6. int *p = (int *)malloc(10 * sizeof(int));
  7. printf("p = %p\n", p);
  8. for (int i = 0; i < 10; i++)
  9. {
  10. *(p + i) = i * 2;
  11. }
  12. for (int i = 0; i < 10; i++)
  13. {
  14. printf("*(p + %d) = %d\n", i, *(p + i));
  15. }
  16. /*
  17. void * realloc (void *ptr, size_t_size);
  18. ptr 是需要提供给当前函数通过 malloc calloc realloc 申请
  19. 的内存空间的首地址, size 是当前重新分配空间对应的空间字节数
  20. 返回值是新空间首地址
  21. 1.地址不变
  22. 2.地址改变
  23. 【必须使用原本存储空间的首地址的指针变量,接受 realloc 返回值】
  24. */
  25. p = (int *)realloc(p, 60);
  26. printf("p = %p\n", p);
  27. for (int i = 0; i < 15; i++)
  28. {
  29. printf("*(p + %d) = %d\n", i, *(p + i));
  30. }
  31. free(p);
  32. p = NULL;
  33. return 0;
  34. }

C++内存申请案例 

  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <cstring>
  4. #include <cstdio>
  5. using namespace std;
  6. int main(int argc, char const *argv[])
  7. {
  8. //C语言 calloc 申请内存空间
  9. int *arr = (int *)calloc(10, sizeof(int));
  10. //释放函数
  11. free(arr);
  12. arr = NULL;
  13. //C++ 内存申请空间, 数据类型 变量名 = new 数据类型
  14. int *new_arr = new int[10];
  15. //进行擦除操作,避免野值问题
  16. memset(new_arr,0,sizeof(int));
  17. for (int i = 0; i < 10; i++)
  18. {
  19. new_arr[i] = i*2;
  20. }
  21. for (int i = 0; i < 10; i++)
  22. {
  23. cout << "new_arr[" << i << "]" << new_arr[i] << endl;
  24. }
  25. delete new_arr;
  26. return 0;
  27. }

今天的分享到此结束啦!! 我们下期再见!! 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/641070
推荐阅读
相关标签
  

闽ICP备14008679号