函数malloc()和calloc()都可以用来动态分配内存空间,但两者稍有区别。
1,malloc()函数有一个参数,即要分配的内存空间的大小.
void *malloc(size_t size);
2,calloc()函数有两个参数,分别为元素的数目和每个元素的大小,这两个参数的乘积就是要分配的内存空间的大小.
void *calloc(size_t numElements,size_t sizeOfElement);
3,如果调用成功,函数malloc()和函数calloc()都将返回所分配的内存空间的首地址。
4,函数malloc()和函数calloc()的主要区别是:malloc()不能初始化所分配的内存空间,而calloc()能。
如果由malloc()函数分配的内存空间原来没有被使用过,则其中的每一位可能都是0;反之,如果这部分内存曾经被分配过,则其中可能遗留有各种各样的数据。也就是说,使用malloc()函数的程序开始时(内存空间还没有被重新分配)能正常进行,但经过一段时间(内存空间还已经被重新分配)可能会出现问题。
函数calloc()会将所分配的内存空间中的每一位都初始化为零,也就是说,如果你是为字符类型或整数类型的元素分配内存,那麽这些元素将保证会被初始化为0;如果你是为指针类型的元素分配内存,那麽这些元素通常会被初始化为空指针;如果你为实型数据分配内存,则这些元会被初始化为浮点型的零。
5,malloc和new的区别:
函数声明(函数原型):void *malloc(int size)
说明:malloc 向系统申请分配指定size个字节的内存空间。返回类型是 void* 类型。
void* 表示未确定类型的指针。C,C++规定,void* 类型可以强制转换为任何其它类型的指针。
new 返回指定类型的指针,并且可以自动计算所需要大小。比如:
int *p;
p = new int;
//返回类型为int* 类型(整数型指针),分配大小为 sizeof(int);
或:
int* parr;
parr = new int [100];
//返回类型为 int* 类型(整数型指针),分配大小为 sizeof(int) * 100;
而 malloc 则必须由我们计算要字节数,并且在返回后强行转换为实际类型的指针。
int* p;
p = (int *) malloc (sizeof(int));
6,realloc
原型:extern void *realloc(void *mem_address, unsigned int newsize);
用法:#include <stdlib.h> 有些编译器需要#include <malloc.h>
功能:改变mem_address所指内存区域的大小为newsize长度。
说明:如果重新分配成功则返回指向被分配内存的指针,否则返回空指针NULL。
当内存不再使用时,应使用free()函数将内存块释放。
注意:这里原始内存中的数据还是保持不变的。
7,memcpy
原型:extern void *memcpy(void *dest, void *src, unsigned int count);
用法:#include <string.h>
功能:由src所指内存区域复制count个字节到dest所指内存区域。
说明:
src和dest所指内存区域不能重叠,函数返回指向dest的指针。
8,memmove
原型:extern void *memmove(void *dest, const void *src, unsigned int count);
用法:#include <string.h>
功能:由src所指内存区域复制count个字节到dest所指内存区域。
说明:
src和dest所指内存区域可以重叠,但复制后src内容会被更改。函数返回指向 dest的指针。
9,memcmp
原型:extern int memcmp(void *buf1, void *buf2, unsigned int count);
用法:#include <string.h>
功能:比较内存区域buf1和buf2的前count个字节。
说明:
当buf1<buf2时,返回值<0
当buf1=buf2时,返回值=0
当buf1>buf2时,返回值>0
10,strncmp
函数名: strncmp
功 能: 串比较
用 法: int strncmp(char *str1, char *str2, int maxlen);
说明:比较字符串str1和str2的大小,如果str1小于str2,返回值就<0,反之如果str1大于str2,返回值就>0,如果str1等于str2,返回值就=0,maxlen指的是str1与str2的比较的字符数。此函数功能即比较字符串str1和str2的前maxlen个字符。
11,strncpy
char * strncpy(char *s1,char *s2,size_t n);
将字符串s2中最多n个字符复制到字符数组s1中,返回指向s1的指针。
注意:如果源串长度大于n,则strncpy不复制最后的'\0'结束符,所以是不安全的,复制完后需要手动添加字符串的结束符才行。如果拷贝到'\0'就结束复制。
分享到:
相关推荐
### malloc和calloc的区别 在C语言中,动态内存分配是一项重要的功能,它允许程序在运行时根据需求分配或释放内存。`malloc` 和 `calloc` 是两种常用的内存分配函数,它们均定义在 `<stdlib.h>` 头文件中,用于动态...
标题与描述核心知识点详解:`xin\malloc和calloc区别` 在C语言中,动态内存管理是程序员必须掌握的重要技能之一,而`malloc`和`calloc`则是实现这一目标的两个关键函数。它们允许程序员在运行时请求特定大小的内存...
### malloc与calloc的区别详解 #### 一、概述 在C语言中,动态内存分配是非常重要的一个环节,它允许程序员在运行时根据需求分配和管理内存。`malloc` 和 `calloc` 是两个常用的内存分配函数,它们都属于标准...
在C语言编程中,内存管理是一项关键任务,`malloc`和`calloc`是两个常用的动态内存分配函数。它们都属于C标准库中的`stdlib.h`,用于在程序运行时为变量分配内存空间,但它们之间存在着一些显著的区别。 首先,`...
个人总结各类博客和资料里关于malloc,calloc,realloc的对比
利用C语言进行模拟实现calloc/malloc的方程,可以更好的学习C语言内存管理,
本文将详细介绍C语言中两种常用的动态内存分配函数:`malloc()` 和 `calloc()`,并探讨它们之间的区别。 #### malloc() 函数 `malloc()` 函数用于在程序运行期间动态地分配指定大小的内存块。它的原型定义如下: ...
C语言中 malloc、calloc、realloc的区别 (1)C语言跟内存分配方式 从静态存储区域分配. 内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量、static变量. 在栈上创建 在执行...
### Malloc和New的区别 #### 一、基本概念与功能 **Malloc** 与 **Free** 是 C/C++ 语言中的标准库函数,主要用于动态内存的分配与释放。这两个函数定义在 `<cstdlib>`(或 `<malloc.h>`)库中。 **New** 与 **...
为了理解 Linux 的内存管理机制,我们需要了解几个关键的系统调用和函数,包括 sbrk(), mmap(), malloc(), calloc() 等。这篇文章将详细解析这些函数的异同,及其在 Linux 内存管理机制中的角色。 首先,让我们从 ...
malloc和new的区别 malloc和new是两种不同的动态内存分配方式,都是用于申请和释放内存的,但它们有着不同的机制和用途。malloc是C语言的标准库函数,而new是C++的运算符,两者都可以用于申请动态内存和释放内存,...
而C++则通过关键字new和delete来实现这一功能,它们与C语言中的malloc和free既有相似之处也有明显的区别。本文将对malloc和new的区别进行详细解读,包括它们的属性、参数、返回类型、自定义类型处理、内存区域、分配...
接下来,我们来看malloc和calloc的区别。这两个函数都属于C标准库中的`stdlib.h`,用于动态分配内存。 malloc函数的基本形式是`void* malloc(size_t size)`,它接受一个参数,即所需分配的字节数,然后返回一个指向...
lwmem 库提供了核心的动态内存分配功能,包括malloc、calloc、realloc和free,这些都是C语言编程中常用的内存操作函数。 1. **malloc**:malloc函数是动态内存分配的核心,它根据传入的字节数来分配一块连续的内存...
当使用free释放内存时,程序员必须确保传入的ptr是之前通过malloc、calloc或realloc函数获得的指针。如果ptr为NULL,调用free函数不会有任何效果。释放内存的一个典型操作如下: ```c free(pc); ``` 这行代码将...
在C++编程中,`new`和`malloc`都是用于动态内存分配的工具,但它们在使用和功能上有显著的区别。下面将详细阐述这些差异。 首先,`new`和`delete`是C++中的运算符,而`malloc`和`free`是C/C++标准库中的函数。`new`...
在C语言中,内存管理是程序员需要关注的重要部分,其中malloc、realloc和calloc是三个常用的动态内存分配函数。...正确使用malloc、calloc和realloc,以及了解它们潜在的风险和优化方法,是每个C程序员必备的知识。
动态内存分配主要包括三个主要函数:`malloc()`, `calloc()`, 和 `realloc()`,以及一个释放内存的函数`free()`。这些函数都是C标准库中的核心部分,它们提供了在程序运行过程中动态调整内存的能力。 1. `malloc...