摘录自《Linux C 从入门到精通》。
关于动态内存的分配所使用的操作函数在这里主要介绍malloc函数、calloc函数、realloc函数和memset函数的基本用法。
函数原型为:
void *malloc(unsigned int size);
该函数的功能是分配长度为size字节的内存块。
如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。注意当内存不再使用时,要使用free()函数释放内存块。例如使用malloc函数获得一块内存空间,内存空间的大小与返回的指针类型由程序员根据需要自行规定,代码如下:
void main()
{
long* buffer;
buffer = (long *)malloc(400); //获得一块长整型数组空间
free(buffer); //释放内存空间
}
函数原型为:
void *calloc(unsigned n,unsigned size);
该函数的功能是在内存的动态区存储中分配n个长度为size的内存块。
如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL,同样在内存不再使用时要用free()函数释放内存块。
同时,用calloc函数可以为一维数组开辟动态存储空间,n为数组元素个数,每个元素长度为size。
例如,使用calloc函数获得一块长整型数组空间,代码如下:
void main()
{
long* buffer;
buffer = (long *)calloc(20,sizeof(long)); //获得一块长整型数组空间
free(buffer); //释放内存空间
}
函数原型为:
void *realloc(void *mem_address,unsigned int newsize);
该函数的功能是调整mem_address所指内存区域的大小为newsize长度。
如果重新分配内存成功,则返回指向被分配内存的指针,否则返回空指针NULL。并且当内存不再使用时,要应用free()函数将内存空间释放。
当参数mem_address指向NULL时,即调整空指针所指向的内存区域的大小为newsize长度,此时realloc函数的功能就如同malloc函数。若参数newsize为0,即要调整成的长度为0时,函数realloc所实现的功能相当于free函数,释放掉该内存区块。
例如:在vim编辑器中编写一个简单的C语言程序,使用realloc函数重新分配一块内存空间。
#include
#include
main()
{
char *p;
p=(char *)malloc(100); /* 为指针p开辟一个内存空间*/
if(p) /*判断内存分配成功与否*/
printf("Memory Allocated at: %x",p);
else
printf("Not Enough Memory!\n");
getchar();
p=(char *)realloc(p,256); /*调整p内存空间从100字节调整到256字节*/
if(p)
printf("Memory Reallocated at: %x",p);
else
printf("Not Enough Memory!\n");
free(p); /*释放看p所指向的内存空间*/
getchar();
return 0;
}
函数原型为:
void *memset(void *s,char ch,unsigned n);
该函数的功能是设置s中的所有字节为ch,s数组的大小为n。
例如:在vim编辑器中编写一个简单的C语言程序,演示memset函数的功能,使用字符‘*’替换数组s中的字符串。
#include
#include
int main(void)
{
char s[] = "welcome to mrsoft\n"; /*定义一个字符数组s*/
printf("s before memset: %s\n", s); /*输出字符数组中的内容*/
memset(s, '*', strlen(s) - 1); /*设置s数组中的字符串内容为“*”*/
printf("s after memset: %s\n", s); /*输出此时的字符数组内容*/
return 0;
}