C语言中realloc,malloc,calloc区别
来源:互联网 发布:淘宝发优惠怎么拿提成 编辑:程序博客网 时间:2024/05/17 00:18
realloc,malloc,calloc区别
三个函数的申明分别是:
void* realloc(void* ptr, unsigned newsize);
void* malloc(unsigned size);
void* calloc(size_t numElements, size_t sizeOfElement);
都在stdlib.h函数库内
它们的返回值都是请求系统分配的地址,如果请求失败就返回NULL
malloc()
在内存的动态存储区中分配一块长度为size字节的连续区域。参数size为需要的内存空间的长度,返回该区域的地址
calloc()
calloc()
与malloc
相似,参数sizeofElement为申请地址的单位元素长度,numElements为参数个数 realloc()
realloc()是给一个已经分配了地址的指针重新分配空间,参数ptr为原有的空间地址,newsize
realloc()是给一个已经分配了地址的指针重新分配空间,参数ptr为原有的空间地址,newsize
是重新申请的地址空间
主要区别:
1.malloc不能初始化所分配的内存空间,而函数calloc能。如果malloc函数分配的内存空间原来
没有被使用过,则其中的每一位可能都是0;反之,如果这部分内存曾经被分配过,则其中可能遗
留各种各样的数据,也就是说,使用malloc函数的程序开始时(内存还没有被重新分配)能正常进
行,但经过一段时间(内存已经被重新分配,可能会出现一些问题)
2.calloc会将所分配的空间中的每一位都初始化为零,也就是说如果你是字符类型或整数类型的元素
分配内存,那么这些元素将保证会被动的初始化为0,如果你为指针类型的元素分配内存,那么这些
元素通常会被初始化为空指针。如果你为实型元素分配内存,则这些元素会被初始化为浮点型的0。
3.realloc可以对给定的指针所指向的空间进行扩大或缩小,无论是扩大还是缩小,原有的内存中的
内容将保持不变,当然,对于缩小,则被缩小的那一部分的内容将会丢失,realloc并不保持调整后
的内存空间和原来的 内存空间保持同一内存地址,realloc返回的指针很可能指向新的地址。
例题:
==》
判断程序能不能执行:
void *p=(void *)malloc(void); p++;
这个程序一定是不能运行的,参数为void代表没有参数,malloc不支持0参数,所以不能运行。
==》
若改为:void *p=(void *)malloc(0);在VC6下不会返回空指针,引用网上找的一句C99标准:
If the size of the space requested is zero, the behavior is implementation defined:
either a null pointer is returned, or the behavior is as if the size were some
nonzero value, except that the returned pointer shall not be used to access an object.
如果所请求的空间大小为0,其行为由库的实现者定义:可以返回空指针,也可以让效果跟申请某个非0大小的空间一样,所不同的是返回的指针不可以被用来访问一个对象。
过年10天来,没有好好写过一个博客,这段时间太松懈的,太堕落了,希望自己能不忘初心加油!
晚安
0 0
- C语言中realloc,malloc,calloc区别
- C语言之 malloc,realloc, calloc区别
- C语言realloc,malloc,calloc的区别
- C语言 malloc calloc realloc 区别
- C中malloc calloc realloc 的区别
- C语言 malloc realloc calloc
- C语言 内存分配 (malloc/realloc/calloc区别)
- C语言内存分配calloc,malloc,alloc,realloc的区别
- C语言malloc,calloc,realloc函数之间的区别
- c语言中malloc、realloc与calloc 的区别以及联系
- C语言中 malloc,calloc 和 realloc 函数之间的区别
- c语言中malloc、realloc与calloc 的区别以及联系
- C语言中alloca,calloc,malloc,free,realloc,sbrk简介
- c中malloc realloc calloc 的区别和联系
- c中malloc realloc calloc 的区别和联系
- c中malloc realloc calloc 的区别和联系
- c中malloc realloc calloc 的区别和联系
- c中malloc calloc realloc 的区别和联系
- Synchronized(对象锁)和Static Synchronized(类锁)的区别
- 1720 (错误)
- codeforce 698B Fix a Tree
- TCP建立连接为什么是三次握手,为什么不是两次或四次?
- SWIFT 函数参数 3.0 改动--Boolan
- C语言中realloc,malloc,calloc区别
- SystemBarTint实现沉浸模式
- Shaders for Game Programmers and Artists(8) - Fog
- [LeetCode] Longest Increasing Subsequence
- poj 2449 Remmarguts' Date(K短路)
- 解决tmux下vim背景颜色无法刷新问题
- struct和typedef struct彻底明白了
- Maven使用阿里云源
- 【C语言】题目1000:计算a+b