malloc(0)的问题】的更多相关文章

malloc的内存分配之 malloc(0)的内存分配情况 #include<iostream> using namespace std; int main() { char *p; if((p=(char *)malloc(0))==NULL) puts("got a null pointer"); else puts("got a valid pointer"); } 答案:got a valid pointer 首先:     在标准的malloc…
就像我在http://www.cnblogs.com/wuyuegb2312/p/3219659.html 文章中评论的那样,我也碰到了被提问这个malloc(0)的返回值问题,虽然感觉这样做在实际中没有任何意义,但既然被提问到了,那总得给点答复.当时的回答是“返回一个NULL指针”. 就像@五岳查看man结果的一样,我也查看了,malloc() allocates size bytes and returns a pointer to the allocated memory. The mem…
原文地址:http://prog21.dadgum.com/179.html 在大多的系统中,这个C的小程序将会吸收全部空闲的内存. ){ ); } 在我们聊malloc(0)之前,让我们看看malloc(1)这个更简单的情况. 这有一个关于malloc的新的有趣的C程序问题:”用一个指针去动态的分配内存,我们能怎样决定它指向多少字节(byte)?“这个答案是令人沮丧的“你不能决定.”但是当你调用free在相同的指针,内存分配知道这个块(block)有多大,所以它存储在计算机某个地方.这个地方一…
http://blog.csdn.net/js_xj/article/details/5826042 解答: 首先来解释malloc(0)的问题,这个语法是对的,而且确实也分配了内存,但是内存空间是0,就是说返回给你的指针是不能用的,感觉奇怪吧?但 是从操作系统的原理来解释就不奇怪了,这要涉及操作系统维护内存的方法来说了,在内存管理中,内存被分为2部分,栈和堆,栈有自己的机器指令,是一个先进 后出的数据结构,我就在这里不再过多解释了,malloc分配的内存是堆内存,由于堆没有自己的机器指令,所以…
linux手册上的说明 If size is 0, then malloc() returns either NULL, or a unique pointer value that can later be successfully passed to free(). 意思是如果传入的size为0,则返回NULL或者一个指针,该指针可以正确的被free调用 那么该指针到底指向什么呢? glibc的实现 /malloc/malloc.c 492行 malloc(size_t n) If n is…
问题来自于<程序员面试宝典(第三版)>第12.2节问题9(这里不评价<程序员面试宝典>,就题论题): 下面的代码片段输出是什么?为什么? char *ptr; ))==NULL) puts("Got a null pointer"); else puts("Got a valid pointer"); 解析:......故意把0值传给了函数malloc,得到了一个合法的指针,这就是上面的代码,该代码的输出是"Got a valid…
以下的代码片段输出是什么?为什么? char *ptr; ))==NULL) puts("Got a null pointer"); else puts("Got a valid pointer"); 解析:......有益把0值传给了函数malloc.得到了一个合法的指针,这就是上面的代码,该代码的输出是"Got a valid pointer". 这个"解析"根本就没有解析嘛.好在查资料非常方便.<C语言參考手冊&g…
1.malloc在C和C++中的区别 1.1.C中可以将任意的指针赋值给void*类型的变量.也可以将void*类型的值赋值给通常的指针变量. -------------------------------------------------------------------------------------------------------ANSI C 以前的C因为没有void*这样的类型,所以malloc的返回值类型被定义为char*.char*是不能被赋给指向其他类型的指针变量的.所…
1.malloc 作用:分配内存块 原型:void *malloc(size_t size);size表示要分配的字节数 返回值:返回一个指向所分配空间的void指针,假设没有足够的内存可用,则返回NULL. 假设要返回一个指向特定类型的指针,则在返回值上用一个类型转换.比如: char* p;         p=(char*)malloc(20); 假设size是0,则malloc在堆中分配一个长度为0的项,而且返回一个指向那项的有效指针.比如: int *p1=(int*)malloc(0…
malloc int* p = (int *) malloc (sizeof(int)*128); //分配128个(可根据实际需要替换该数值)整型存储单元,并将这128个连续的整型存储单元的首地址存储到指针变量p中. 在Linux中可以有这样:malloc(0),这是因为Linux中malloc有一个下限值16Bytes,注意malloc(-1)是禁止的:但是在某些系统中是不允许malloc(0)的. if (NULL == (p = (type *)malloc(sizeof (type))…