当前位置: 首页 > news >正文

malloc(0)的返回值

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

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

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

ptr = malloc(0*sizeof(char)) ;
ptr是局部指针变量,存储在栈中,它的值是动态分配的一块堆中的空间的首地址
所以说这个地址是合法的,但是由于malloc的大小是0,故这个这个地址指向的堆中的存储空间的大小是0,
这个指针类似于一个野指针,可以使用的,但是是有风险的,因为不知道这个指针后面的内存空间被谁使用着,要是被核心进程使用,哪肯定会造成相应程序的崩溃
关于加上free后,程序会崩溃,我理解是由于在堆中并没有对应的空间分配到导致的~

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

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 ;
}

 

转载于:https://my.oschina.net/u/920274/blog/1838312

相关文章:

  • linux安装mysql5.7.19
  • Python(生成执行文件)
  • Dart4Flutter - 不可变性
  • Android Toolbar的使用 顶部标题栏+后退键
  • 物联网技术周报第 141 期: 使用 Alexa Voice 和 Raspberry Pi 构建图片识别应用
  • MySQL中sync_relay_log选项对I/O thread的影响分析
  • IIS发布网站Microsoft JET Database Engine 错误 '80004005'的解决办法,基于Access数据库...
  • 13、jmeter抓包之浏览器请求
  • HDU 5969 最大的位或【贪心/按位或/思维】
  • Linux内核中的锁——知识点
  • 浅谈Service Mesh体系中的Envoy
  • 3 .5 数据库引擎优化顾问
  • 在 Windows 中安装 Laravel 5.1.X
  • Linux下0号进程的前世(init_task进程)今生(idle进程)----Linux进程的管理与调度(五)【转】...
  • 2017年开发语言排名
  • Android开源项目规范总结
  • Fastjson的基本使用方法大全
  • happypack两次报错的问题
  • javascript数组去重/查找/插入/删除
  • vue2.0项目引入element-ui
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • zookeeper系列(七)实战分布式命名服务
  • 从零开始学习部署
  • 复习Javascript专题(四):js中的深浅拷贝
  • 工作中总结前端开发流程--vue项目
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 一道面试题引发的“血案”
  • 从如何停掉 Promise 链说起
  • ​2020 年大前端技术趋势解读
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (floyd+补集) poj 3275
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (过滤器)Filter和(监听器)listener
  • (三)终结任务
  • (十六)串口UART
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • (已解决)什么是vue导航守卫
  • .CSS-hover 的解释
  • .MSSQLSERVER 导入导出 命令集--堪称经典,值得借鉴!
  • .net core 依赖注入的基本用发
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .NET Core中Emit的使用
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?
  • .sdf和.msp文件读取
  • /etc/sudoers (root权限管理)
  • /etc/sudoer文件配置简析
  • @AliasFor注解
  • @ConditionalOnProperty注解使用说明
  • @Documented注解的作用
  • @RestControllerAdvice异常统一处理类失效原因