c语言malloc返回值,malloc(0)的返回值
很多嵌入式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)的返回值相关推荐
- python字符串和List:索引值以 0 为开始值,-1 为从末尾的开始位置;值和位置的区别哦...
String(字符串) Python中的字符串用单引号 ' 或双引号 " 括起来,同时使用反斜杠 \ 转义特殊字符. 字符串的截取的语法格式如下: 变量[头下标:尾下标] 索引值以 0 为开 ...
- 格子玻尔兹曼方法书中,计算机代码(Fortran语言)FDM的输出结果是什么,为什么显示程序“[25024] Console1.exe”已退出,返回值为 0 (0x0)。
格子玻尔兹曼方法书中,计算机代码(Fortran语言)FDM的输出结果是什么,为什么显示程序"[25024] Console1.exe"已退出,返回值为 0 (0x0).
- fread读结构体返回值是0无错误_嵌入式C编程之错误处理(附代码例子)!
原标题:嵌入式C编程之错误处理(附代码例子)! 作者: clover-toeic 前言 本文主要总结嵌入式系统C语言编程中,主要的错误处理方式.文中涉及的代码运行环境如下: 一.错误概念 错误分类 从 ...
- c语言malloc calloc,C语言内存管理:malloc、calloc、free的实现
任何一个对C稍稍有了解的人都知道malloc.calloc.free.前面两个是用户态在堆上分配一段连续(虚拟地址)的内存空间,然后可以通过free释放,但是,同时也会有很多人对其背后的实现机制不了解 ...
- 【嵌入式C语言】内存分配 malloc 和 free
文章目录 永不分离的 malloc 和 free 1. 简介 2. void * 3. malloc 4. free 5. malloc.free 小结 5.1.连续内存块 5.2.双宿双飞才好 5. ...
- C语言指针之二malloc的用法及详解
一.为什么c语言中要有malloc malloc就是memory allocate动态分配内存,malloc的出现时为了弥补静态内存分配的缺点,静态分配内存有如下缺点: 1.比如说,传统的一维数组,如 ...
- C语言-动态内存管理(malloc()、calloc()、realloc()、free())
C语言 动态内存分配 文章目录 C语言 动态内存分配 前言 一.为什么存在动态内存分配? 二.动态内存函数的介绍 1.初识malloc()和free() 2.malloc()和free()的简单使用 ...
- C语言数组初始化及malloc初始化
前言 做笔试题的时候老有些小错误,来总结一下. 数组赋值初始化的三个方式 1.{0} 初始化 例如: int nums[3] = {0}; 但是经常出现的是给定长度(变量)然后需要进行初始化,如果写成 ...
- C语言精髓篇|函数的参数和返回值
如果把函数比喻成一台机器,那么参数就是原材料,返回值就是最终产品:从一定程度上讲,函数的作用就是根据不同的参数产生不同的返回值. 函数的参数 在函数定义中出现的参数可以看做是一个占位符,它没有数据,只 ...
最新文章
- TiDB Ecosystem Tools 原理解读系列(二)TiDB-Lightning Toolset 介绍
- Linux内核中断底半部处理--工作队列
- c++ 字符串数组长度排序_数组 | 后缀数组的求法及应用
- bspline怎么使用 python_资源分享:微软官方的Python入门教程
- 基于Visual C++2013拆解世界五百强面试题--题5-自己实现strstr
- Silverlight实用窍门系列:56.Silverlight中的Binding使用(一)【附带实例源码】
- Bootstrap 源码版文件结构
- jQuery琐碎笔记
- double key map 的实现
- 微信养号防封攻略_防封群微信怎么卖
- 【数据可视化】飞线图(航线图)在地图中的生成的三种方案
- 评论回复功能 asp.net_抖音蓝V企业号运营必备,用户管理功能技巧大揭秘!
- 研究生看论文的看的是什么
- STM32CubeMX | 36 - 使用CAN总线进行双板通信(TJA1050)
- USB 设备驱动之设备接入梳理(六)
- java自带的发布订阅模式
- [Leetcode刷题心得][数组、字符串]242. 有效的字⺟母异位词
- ESP32使用freeRTOS的消息队列
- BERT-MRC:统一化MRC框架提升NER任务效果
- R安装学习及包的管理