【C语言入门教程】4.7 指针的地址分配 - mallocl(), free()

指针变量可指向任何类型的变量,在处理过程中,指针变量指向的变量通过传递变量的地址来实现,指针变量的取值是内存的地址,这个地址应当是安全的,不可以是随意的。否则,写入内存单元的值将使得已存放的数据或程序丢失。应使用变异系统提供的标准函数来实现地址分配。

GCC编译器支持动态分配内存的函数 malloc()free(),它们包含在头文件 stdlib.h 中。动态内存分配的含义是在程序执行的过程中,动态地划分内存空间供程序使用。当程序不需要使用这些内存空间,则可以将其释放。malloc() 函数的作用是向操作系统申请内存,free() 函数的作用是释放所申请的内存。如下例所示:

char *pc;			// 声明字符型指针变量 pc
pc = malloc(50);	// 在内存中为程序申请 50 字节的空间,并将首地址赋值给指针变量 pc
if (pc != NULL)		// 如果分配内存成功,则执行下列源代码
{
	scanf("%49s", pc);	// 从键盘输入获得字符串,并保存在 malloc() 所划分的内存空间内
	puts(pc);			// 输出字符串
	free(pc);			// 释放 malloc() 函数所申请的内存空间
	pc = NULL;			// 是指针指向空地址,避免再次引用所释放的内存空间
}

malloc() 函数的参数是长整型数值,该数值表示所申请的字节数。如果分配内存失败返回 NULL,如果成功返回所申请内存空间首地址。free() 函数必须与 malloc() 配对使用,在不需要所申请的内存空间后将其释放,否则
会造成内存泄漏,影响操作系统和其他程序运行。另外需要注意的是,free()函数释放指向 NULL 的指针,或释放指向并非 malloc() 函数所申请内存空间的指针都会造成严重的程序错误。

posted @ 2016-07-18 15:20  52php  阅读(1549)  评论(0编辑  收藏  举报