c中malloc申请堆空间使用及案例

本文介绍C语言中如何使用malloc函数动态分配内存,并通过实例演示了如何将文件内容读取到内存,然后再写入到另一文件的过程。涉及内存分配、文件操作及内存释放等关键步骤。

相关:

【c语言】malloc函数详解:https://blog.youkuaiyun.com/flowing_wind/article/details/81240910

c中malloc申请堆空间

  1. void test22() {

  2. int *pr;

  3. pr = (int *)malloc(sizeof(int)*128);//申请128个int4字节空间

  4.  
  5. if (pr == NULL) {//判断是否申请成功

  6. return;

  7. }

  8.  
  9. memset(pr,0,sizeof(int)*128);//初始化空间为0

  10.  
  11.  
  12.  
  13.  
  14. free(pr);//释放空间

  15. pr = NULL;

  16.  
  17. }


具体使用以文件读写为例,把文件读到内存中再写入另一个文件

 
  1. void test23() {

  2. char *pr;

  3. char *prr;

  4. FILE *myf = NULL;

  5. FILE *myTF = NULL;

  6. int size = 0;

  7. int i = 0;

  8. //二进制打开文件

  9. myf = fopen("E:/vs/work/calc.exe","rb");

  10. myTF = fopen("E:/vs/work/test.exe", "wb");

  11. //判断文件是否打开成功

  12. if (!myf) {

  13. printf("\nerror:wen jian");

  14. return;

  15. }

  16.  
  17. if (!myTF) {

  18. printf("\nerror:wen jian");

  19. return;

  20. }

  21. //计算文件大小

  22. if ((fseek(myf,0L, SEEK_END))) {

  23. printf("\nerror:pian yi");

  24. return;

  25. }

  26.  
  27. size = ftell(myf);

  28. if (size == 0) {

  29. printf("\nerror:dax iao");

  30. return;

  31. }

  32.  
  33. printf("\nget file size:%x", size);

  34. //申请空间

  35. pr = (char *)malloc(sizeof(char) * size);

  36.  
  37. if (pr == NULL) {

  38. printf("\nerror:nei cun");

  39. return;

  40. }

  41. //初始化空间

  42. memset(pr, 0, sizeof(char) * size);

  43. //定位指针到开头

  44. fseek(myf, 0L, 0L);

  45.  
  46. //一个个字符写入内存

  47. prr = pr;

  48. while (++i <= size)

  49. {

  50. *pr = fgetc(myf);

  51. pr++;

  52. }

  53. //或者直接二进制写入内存

  54. i = 0;

  55. i = fread(pr,size,1,myf);

  56. printf("\nread file date number:%x", i);

  57.  
  58. //指针回到首地址

  59. pr = prr;

  60.  
  61. printf("\nget file date location:%x", prr);

  62. i = 0;

  63. //二进制写入文件

  64. i = fwrite(pr, size, 1, myTF);

  65. printf("\nwrite file date number:%x",i);

  66.  
  67. printf("\nput OK !");

  68. //释放内存关闭文件

  69. free(pr);

  70. pr = NULL;

  71. prr = NULL;

  72. fclose(myf);

  73. fclose(myTF);

  74. }

 

### C语言中`malloc`函数的使用 在C语言编程环境中,动态内存分配是一项重要的功能,它允许程序运行时根据需求申请所需大小的空间。对于`malloc`而言,其主要作用是从堆(heap)上分配指定数量的字节,并返回指向这块新分配空间的第一个字节地址的指针[^1]。 #### 函数声明与参数说明 `malloc`的标准形式如下所示: ```c void* malloc(size_t size); ``` 这里`size_t`是一个无符号整型数据类型,在不同平台上可能具有不同的位宽,但它总是足够大以容纳任何对象尺寸。当调用此函数时,需传入想要获取的存储单元数目作为唯一参数——即希望获得多少个连续可用的字节数量[size][^2]。 #### 返回值解释 成功执行后,该操作会返回一个指向已初始化为零或者未定义状态的新近开辟区域起始位置(`void *`);如果请求失败,则返回NULL来指示错误情况的发生[^3]。 #### 实际应用案例分析 下面给出了一段简单演示如何利用`malloc`创建数组并释放资源的例子: ```c #include <stdio.h> #include <stdlib.h> int main(){ int length; printf("请输入您想建立的一维整形数组长度:"); scanf("%d", &length); /* 动态分配 */ int *array = (int *)malloc(length * sizeof(int)); if(array == NULL){ fprintf(stderr, "内存不足\n"); exit(EXIT_FAILURE); } // 对于实际开发来说,此处可以加入更多逻辑处理... /* 清理工作 */ free(array); } ``` 上述代码片段展示了基本流程:先询问用户期望构建多大规模的数据结构;接着通过乘法运算计算出总需占用多少个四字节单位(假设目标平台上的`int`占四个字节),并将结果传递给`malloc()`完成相应规模区块的确立;最后记得适时回收不再使用的部分以免造成泄漏问题。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值