很多嵌入式c面试,会问到这个问题,我也就百度了下,集合几位网友的分析,记录下来,便于我自己随时查看

当malloc分配内存时它除了分配我们指定SIZE的内存块,还会分配额外的内存来存储我们的内存块信息,用于维护该内存块。因此,malloc(0)返回一个合法的指针并指向存储内存块信息的额外内存,我们当然可以在该内存上进行读写操作,但是这样做了会破坏该内存块的维护信息,因此当我们调用free(ptr)时就会出现错误

ptr = malloc(0*sizeof(char)) ;

ptr是局部指针变量,存储在栈中,它的值是动态分配的一块堆中的空间的首地址

所以说这个地址是合法的,但是由于malloc的大小是0,故这个这个地址指向的堆中的存储空间的大小是0,

这个指针类似于一个野指针,可以使用的,但是是有风险的,因为不知道这个指针后面的内存空间被谁使用着,要是被核心进程使用,哪肯定会造成相应程序的崩溃

关于加上free后,程序会崩溃,我理解是由于在堆中并没有对应的空间分配到导致的~

#include

#include

#include

int main()

{

char *ptr ;

ptr = malloc(0*sizeof(char)) ;

if (NULL == ptr)

printf("got a NULL pointer/n");

else

{

printf("got a Valid pointer/n");

strcpy(ptr,"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");

printf("the string at %p is :%s/n",ptr, ptr);

// free(ptr);

}

return 0 ;

}

c语言malloc返回值,malloc(0)的返回值相关推荐

  1. python字符串和List:索引值以 0 为开始值,-1 为从末尾的开始位置;值和位置的区别哦...

    String(字符串) Python中的字符串用单引号 ' 或双引号 " 括起来,同时使用反斜杠 \ 转义特殊字符. 字符串的截取的语法格式如下: 变量[头下标:尾下标] 索引值以 0 为开 ...

  2. 格子玻尔兹曼方法书中,计算机代码(Fortran语言)FDM的输出结果是什么,为什么显示程序“[25024] Console1.exe”已退出,返回值为 0 (0x0)。

    格子玻尔兹曼方法书中,计算机代码(Fortran语言)FDM的输出结果是什么,为什么显示程序"[25024] Console1.exe"已退出,返回值为 0 (0x0).

  3. fread读结构体返回值是0无错误_嵌入式C编程之错误处理(附代码例子)!

    原标题:嵌入式C编程之错误处理(附代码例子)! 作者: clover-toeic 前言 本文主要总结嵌入式系统C语言编程中,主要的错误处理方式.文中涉及的代码运行环境如下: 一.错误概念 错误分类 从 ...

  4. c语言malloc calloc,C语言内存管理:malloc、calloc、free的实现

    任何一个对C稍稍有了解的人都知道malloc.calloc.free.前面两个是用户态在堆上分配一段连续(虚拟地址)的内存空间,然后可以通过free释放,但是,同时也会有很多人对其背后的实现机制不了解 ...

  5. 【嵌入式C语言】内存分配 malloc 和 free

    文章目录 永不分离的 malloc 和 free 1. 简介 2. void * 3. malloc 4. free 5. malloc.free 小结 5.1.连续内存块 5.2.双宿双飞才好 5. ...

  6. C语言指针之二malloc的用法及详解

    一.为什么c语言中要有malloc malloc就是memory allocate动态分配内存,malloc的出现时为了弥补静态内存分配的缺点,静态分配内存有如下缺点: 1.比如说,传统的一维数组,如 ...

  7. C语言-动态内存管理(malloc()、calloc()、realloc()、free())

    C语言 动态内存分配 文章目录 C语言 动态内存分配 前言 一.为什么存在动态内存分配? 二.动态内存函数的介绍 1.初识malloc()和free() 2.malloc()和free()的简单使用 ...

  8. C语言数组初始化及malloc初始化

    前言 做笔试题的时候老有些小错误,来总结一下. 数组赋值初始化的三个方式 1.{0} 初始化 例如: int nums[3] = {0}; 但是经常出现的是给定长度(变量)然后需要进行初始化,如果写成 ...

  9. C语言精髓篇|函数的参数和返回值

    如果把函数比喻成一台机器,那么参数就是原材料,返回值就是最终产品:从一定程度上讲,函数的作用就是根据不同的参数产生不同的返回值. 函数的参数 在函数定义中出现的参数可以看做是一个占位符,它没有数据,只 ...

最新文章

  1. TiDB Ecosystem Tools 原理解读系列(二)TiDB-Lightning Toolset 介绍
  2. Linux内核中断底半部处理--工作队列
  3. c++ 字符串数组长度排序_数组 | 后缀数组的求法及应用
  4. bspline怎么使用 python_资源分享:微软官方的Python入门教程
  5. 基于Visual C++2013拆解世界五百强面试题--题5-自己实现strstr
  6. Silverlight实用窍门系列:56.Silverlight中的Binding使用(一)【附带实例源码】
  7. Bootstrap 源码版文件结构
  8. jQuery琐碎笔记
  9. double key map 的实现
  10. 微信养号防封攻略_防封群微信怎么卖
  11. 【数据可视化】飞线图(航线图)在地图中的生成的三种方案
  12. 评论回复功能 asp.net_抖音蓝V企业号运营必备,用户管理功能技巧大揭秘!
  13. 研究生看论文的看的是什么
  14. STM32CubeMX | 36 - 使用CAN总线进行双板通信(TJA1050)
  15. USB 设备驱动之设备接入梳理(六)
  16. java自带的发布订阅模式
  17. [Leetcode刷题心得][数组、字符串]242. 有效的字⺟母异位词
  18. ESP32使用freeRTOS的消息队列
  19. BERT-MRC:统一化MRC框架提升NER任务效果
  20. R安装学习及包的管理

热门文章

  1. ## CSP 201312-2 ISBN号码(C语言)(100分)
  2. R语言中怎么将一个字符串向量合成一个大字符串
  3. Flex的TabNavigator中tab触发的事件
  4. 面试—每日一题(6)
  5. luogu P1020 导弹拦截
  6. Spring-MVC的配置文件及路径问题
  7. 525 Contiguous Array 连续数组
  8. 淘宝爬取某人的所有购物订单
  9. PAT甲题题解-1070. Mooncake (25)-排序,大水题
  10. 基于motion的视频压缩的实时监控系统