【C】malloc(0)问题
实际上malloc(0)这个语法是对的,也确实分配了内存,但内存空间是0,就是说返回指针是不能用的。malloc(0)的返回值可能是NULL也可能不是NULL,和实参为一个正整数时没什么区别。如果返回值不为NULL,也应该用free()函数释放。malloc(0)唯一不同的地方就是,就算你申请内存成功,即malloc(0)返回值不为NULL,你也没法使用这块内存。
《C语言参考手册》上说“如果请求的长度为0,则标准C语言函数返回一个null指针或不能用于访问对象的非null指针。”
void *malloc(size_t size);
...
malloc() allocates size bytes and returnsa pointer to the allocated memory. The memory is not cleared. If sizeis 0, then malloc() returns either NULL, or a unique pointer value thatcan later be successfully passed to free().
char *ptr;
if(int pp = (strlen(ptr=(char *)malloc(0))) == 0)puts("Got a null pointer");
elseputs("Got a valid pointer");
char *ptr;
if(int pp = (sizeof(ptr=(char *)malloc(0))) == 4)puts("Got a null pointer");
elseputs("Got a valid pointer");
如果求ptr的strlen的值和sizeof的值,该代码的输出是"Got a null pointer"。
A size_t value is always positiveeven if you pass a negative value to malloc.The negative value is converted to an unsigned value of type size_t which leads to a huge positive value.
Example:
char *p = malloc(-2);
is equivalent to:
char *p = malloc(SIZE_MAX- 1); // SIZE_MAX is the maximum
// size_tvalue
【C】malloc(0)问题相关推荐
- malloc(0)-malloc 0 字节
C17中有如下描述: 7.22.3 Memory management functions 1 The order and contiguity of storage allocated by suc ...
- ptr = (char *)malloc(0)
char *ptr; if ((ptr = (char *)malloc(0)) == NULL) puts( "Got a null pointer "); else puts( ...
- malloc的内存分配之 malloc(0)的内存分配情况
#include<iostream> using namespace std; int main() {char *p;if((p=(char *)malloc(0))==NULL)put ...
- 面试官问:malloc(0)时程序会返回什么?
今天跟大家找了篇文章,主要是一个面试中的有趣问题,其实有些问题在开发中没有遇到过会很难回答出来,如果在面试过程中回答正确,皆大欢喜,拿到offer的概率更大:回答不出来也不要信口开河,面试官主要看的是 ...
- c语言malloc返回值,malloc(0)的返回值
很多嵌入式c面试,会问到这个问题,我也就百度了下,集合几位网友的分析,记录下来,便于我自己随时查看 当malloc分配内存时它除了分配我们指定SIZE的内存块,还会分配额外的内存来存储我们的内存块信息 ...
- malloc()参数为0的情况
问题来自于<程序员面试宝典(第三版)>第12.2节问题9(这里不评价<程序员面试宝典>,就题论题): 下面的代码片段输出是什么?为什么? char *ptr; if((ptr ...
- c++申请内存空间_有没有想过:malloc分配的内存空间地址连续吗
来自公众号:技术让梦想更伟大 提出问题 我们在写程序中经常会用到malloc函数进行动态内存分配,但是我们有没有想过,在C语言中,向操作系统请求malloc内存空间的地址是连续的吗??? 测试 我使用 ...
- 使用malloc创建头结点的坑
首先,malloc()是动态内存分配函数,用来向系统请求分配内存空间.当无法知道内存具体的位置时,想要绑定真正的内存空间,就要用到malloc()函数.因为malloc只管分配内存空间,并不能对分配的 ...
- malloc,calloc,realloc
与堆操作相关的两个函数 malloc #include<stdio.h> #include<stdlib.h> #include<string.h>int main ...
最新文章
- 使用RNN神经网络自动生成名字 (不使用深度学习框架,源码)
- 【基础】ABAP不同变量类型之间数值大小比较
- 分布式系统——zabbix监控tomcat
- boost::statechart模块测量 BitMachine 的事件处理性能的测试程序
- linux之tr命令使用和总结
- windows下eclipse模拟运行apk
- 软件行业选择大公司还是小公司
- Oracle EBS学习网站列表
- 从王者荣耀看设计模式(四.简单工厂模式)
- win32 sdk绘制ListBox控件
- 拓端tecdat|R语言量化交易RSI策略:使用支持向量机SVM
- 寻找关键之年的榜样和标准
- Keepalived高可用(原理、安装、启动、单实例配置、双实例双主配置实战篇)
- python 数据分析与挖局书籍
- 饿了么ui 下拉框远程搜索 绑定清空原始数据
- 2022Java微服务最全面试题集
- Ubuntu下录制gif动图
- ArcGIS操作系列5 - Arcmap 裁剪 矢量和栅格数据
- 【分享】常用JS(2)
- (附源码)spring boot社区养老医疗服务平台 毕业设计 041148
热门文章
- 一位校长写给大学学生的一封信
- 一个小偷写给失主的信
- python 如何调用另一个路径下py文件的函数
- 古老的 vscode 下载地址
- Ubuntu 12.04下安装搜狗拼音 + 安装搜狗皮肤-转
- 2009-07-03 19:48 在linux中如何获得微秒精度的时间?-转
- [Python] L1-003. 个位数统计-PAT团体程序设计天梯赛GPLT
- google lab 深度学习_吴恩达、李飞飞等化身超级英雄!深度学习漫画第一卷现已开源...
- Perl用LWP实现GET/POST数据发送 原
- 查看js 执行效率工具