本文记录一些C语言内存控制函数
动态内存分配
malloc 函数
- 函数名: malloc
- 功 能: 配置内存空间
- 用 法: void *malloc(size_t size);
- 返回值: 若配置成功则返回一指针,失败则返回NULL。
-
说 明: malloc()用来配置内存空间,其大小由指定的size决定。
- 程序例:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
int main(int argc,char * argv[])
{
struct Student{
char username[8];
char age;
};
struct Student * stu = malloc(sizeof(struct Student)*2);
stu->age = 110;
(stu+1)->age = 20;
printf("Age %d \n",stu->age);
printf("Age++ %d \n",(stu+1)->age);
free(stu);
return 0;
}
PS:malloc函数申请的内存空间中默认都是垃圾值,使用完毕后记得free释放,否则会造成内存泄露。
calloc 函数
- 函数名: malloc
- 功 能: 配置内存空间
- 用 法: void *calloc(size_t nmemb,size_t size);
- 返回值: 若配置成功则返回一指针,失败则返回NULL。
-
说 明: calloc()用来配置nmemb个相邻的内存单位,每一单位的大小为size,并返回指向第一个元素的指针。这 和使用下列的方式效果相同:malloc(nmemb*size);不过,在利用calloc()配置内存时会将内存内容初始化 为0。
- 程序例:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
int main(int argc,char * argv[])
{
struct Student{
char username[8];
char age;
};
struct Student * stu = calloc(2, sizeof(struct Student));
stu->age = 110;
(stu+1)->age = 20;
printf("Age %d \n",stu->age);
printf("Age++ %d \n",(stu+1)->age);
free(stu);
return 0;
}
free 函数
- 函数名: free
- 功 能: 释放原先配置的内存
- 用 法: void free(void *ptr);
- 返回值: 若配置成功则返回一指针,失败则返回NULL。
- 说 明: 参数ptr为指向先前由malloc()、calloc()或realloc()所返回的内存指针。调用free()后ptr所指的内存空间便会被收回。假若参数ptr所指的内存空间已被收回或是未知的内存地址,则调用free()可能会有无法预期的 情况发生。若参数ptr为NULL,则free()不会有任何作用。