ptr = malloc(0);

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

/*
避免错误:
size 进行判断后在进行动态分配。

为什么?
	malloc在不同编译器上有不同的实现,有的申请0大小返回NULL,
有的就可以返回一个地址,似乎后者较为常见。

	当malloc分配内存时它除了分配我们指定SIZE的内存块,还会分配额
外的内存来存储我们的内存块信息,用于维护该内存块。

	其实内存是分片的, 比喻说你malloc(10); 不是真的给你10个字节,
而是一个内存分片

*/
int
main()
{
	char * ptr = NULL;

	if((ptr = (char *)malloc(0)) == NULL)
		printf("null pointer\n");
	else
		printf("valid pointer\n");
}
/*
[[email protected] test_class]# ./a.out
valid pointer
*/

ptr = malloc(0);

时间: 2024-10-01 15:21:40

ptr = malloc(0);的相关文章

malloc 0

buf = malloc(0) //buf为一个有效的地址 buf = malloc(1.5)   //buf为一个有效的地址 buf = malloc(-1) //buf为NULL free(NULL) //编译不会报错,运行也没问题,不清楚是否存在影响例如:char *buf = NULL;buf = malloc(4); memset(buf,0,4); free(buf) buf = NULL; free(buf); 原文地址:https://www.cnblogs.com/baidub

malloc(0)分配多少内存?(译文)

原文地址:http://prog21.dadgum.com/179.html 在大多的系统中,这个C的小程序将会吸收全部空闲的内存. while(1){ malloc(0); } 在我们聊malloc(0)之前,让我们看看malloc(1)这个更简单的情况. 这有一个关于malloc的新的有趣的C程序问题:"用一个指针去动态的分配内存,我们能怎样决定它指向多少字节(byte)?"这个答案是令人沮丧的"你不能决定."但是当你调用free在相同的指针,内存分配知道这个块

C语言malloc(0)情况分析

https://blog.csdn.net/zhoujian0827/article/details/78354151 https://blog.csdn.net/shimadear/article/details/80291194 https://blog.csdn.net/fovwin/article/details/8170914 //软件编写时,应避免出现malloc(0)的情况. 原文地址:https://www.cnblogs.com/retry/p/11055534.html

malloc(0)的问题

http://blog.csdn.net/js_xj/article/details/5826042 解答: 首先来解释malloc(0)的问题,这个语法是对的,而且确实也分配了内存,但是内存空间是0,就是说返回给你的指针是不能用的,感觉奇怪吧?但 是从操作系统的原理来解释就不奇怪了,这要涉及操作系统维护内存的方法来说了,在内存管理中,内存被分为2部分,栈和堆,栈有自己的机器指令,是一个先进 后出的数据结构,我就在这里不再过多解释了,malloc分配的内存是堆内存,由于堆没有自己的机器指令,所以

malloc()参数为0的情况

下面的代码片段输出是什么?为什么? char *ptr; if((ptr = (char *)malloc(0))==NULL) puts("Got a null pointer"); else puts("Got a valid pointer"); 解析:......故意把0值传给了函数malloc,得到了一个合法的指针,这就是上面的代码,该代码的输出是"Got a valid pointer". 这个"解析"根本就没有解

malloc()參数为0的情况

以下的代码片段输出是什么?为什么? char *ptr; if((ptr = (char *)malloc(0))==NULL) puts("Got a null pointer"); else puts("Got a valid pointer"); 解析:......有益把0值传给了函数malloc.得到了一个合法的指针,这就是上面的代码,该代码的输出是"Got a valid pointer". 这个"解析"根本就没有解

关于malloc(0)的对与错

大家都知道malloc(-1)是错的,但是malloc(0)到底是对还是错呢? 在以前我也没有考虑过,只知道malloc(0)是没有申请任何空间的,是没法往里面写入东西的,但是我在linux上和window编译时却让我出乎意料,它既然没有报错,可以输入和输出,看一个例子大家就知道了: window上运行结果: linux上运行结果: 我一直在想为什么会能正确的输入和输出,是自己很苦恼,按道理说它是错的,让自己很苦恼 经过查找资料终于明白了,原来 char* p = (char *) malloc

如何实现一个malloc

任何一个用过或学过C的人对malloc都不会陌生.大家都知道malloc可以分配一段连续的内存空间,并且在不再使用时可以通过free释放掉.但是,许多程序员对malloc背后的事情并不熟悉,许多人甚至把malloc当做操作系统所提供的系统调用或C的关键字.实际上,malloc只是C的标准库中提供的一个普通函数,而且实现malloc的基本思想并不复杂,任何一个对C和操作系统有些许了解的程序员都可以很容易理解. 这篇文章通过实现一个简单的malloc来描述malloc背后的机制.当然与现有C的标准库

malloc实现

任何一个用过或学过C的人对malloc都不会陌生.大家都知道malloc可以分配一段连续的内存空间,并且在不再使用时可以通过free释放 掉.但是,许多程序员对malloc背后的事情并不熟悉,许多人甚至把malloc当做操作系统所提供的系统调用或C的关键字.实际上,malloc只是 C的标准库中提供的一个普通函数,而且实现malloc的基本思想并不复杂,任何一个对C和操作系统有些许了解的程序员都可以很容易理解. 这篇文章通过实现一个简单的malloc来描述malloc背后的机制.当然与现有C的标