C/C++分配内存空间

来源:互联网 发布:windows 98下载 编辑:程序博客网 时间:2024/05/16 06:56

【方法】C:malloc、calloc、realloc、free;            C++:new、delete

 

【函数原型】:请求成功返回空间首地址,失败返回NULL

#include <stdlib.h>

void *malloc( size_t size ); //分配size字节的连续内存,不负责初始化,使用memset初始化。

void *calloc( size_t num, size_t size ); //分配num个size字节的连续内存,并初始化内存为0。

void *realloc(void* ptr, size_t size); //将已分配空间的指针ptr,重新申请地址为size字节长度。

void free( void *ptr ); //释放malloc、calloc、realloc的ptr地址空间,最后设置ptr = NULL;

void *memset( void *ptr, void cst, size_t size); //将ptr地址里size字节空间的值设置成cst。

memcpy、memmove、memcmp

size_tsizeof(object )返回对象所占的字节数:对象尽量是指针或变量,其次是类型。

 

【区别】

1)malloc只负责分配大小,不负责初始化内存; calloc即分配内存大小,也初始化内存为0。

2)malloc返回的是一个对象;calloc返回的是一个数组,适合为数组申请空间。

3)realloc申请的size小于等于原先空间大小,则保持原状态;大于,则重新分配大小,并将原先内容复制到新空间,原先指针自动释放,但新分配的空间未初始化,需用memset初始化。

4)C++中new/delete分配/释放空间并调用构造,都需成对出现。

 

【实例】

char *str = (char*)malloc( sizeof(char) * 100 );

memset( str, 0,sizeof(str) );

int *ip_a = (int *)calloc(5, sizeof(int) ); 

ip_a = (char *)realloc( ip_a,sizeof(int) * 40 );

2 0
原创粉丝点击