C语言中的malloc与free函数

C语言中的malloc与free函数

malloc函数的作用是在堆中开辟一块指定大小的空间。如果开辟成功,返回空间首个字节地址,失败则返回NULL。

free函数能够释放在堆中开辟的内存空间,传入一个任意类型的指针变量,指向指向被释放区域的首地址。被释放区域应是有malloc开辟的空间。

需要注意的是:

  1. free释放内存空间只是失去了对地址的操作权限,并没有保证清理内存空间。free是否能回清空释放的内存空间,由操作系统决定。所以,需要手动清空以排除这样的不可控因素。
  2. 在释放内存空间之前需要添加判断,释放之后及时将p赋值为NULL,避免多次释放同一内存空间(虽然重复释放在gcc中并没有给与警告,但是在运行时会发生断错误,即程序中断(vs中自动跳入断点),使得后面的代码不能正常运行)。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main(int argc, char *argv[])
{
	int n = 0;
	printf("请输入要申请的元素个数:\n");
	scanf("%d", &n);
	printf("n = %d\n", n);
	int *p = (int *)malloc(n * sizeof(int));

	if (p != NULL)
	{
		memset(p, 0, n * sizeof(int));
	}
	else
	{
		perror("memset");
	}

	printf("请通过键盘给数组赋值:\n");
	//通过键盘给该数组赋值
	//fgets(p, sizeof(n * sizeof(int)), stdin);

	//初始化
	for (size_t i = 0; i < n; i++)
	{
		p[i] = i;
	}

	//打印数组元素
	for (size_t i = 0; i < n; i++)
	{
		printf("打印数组元素:%d\n", p[i]);
	}

	//释放空间
	if (p != NULL) 
	{
		free(p);
	}

	//遍历p
	for (size_t i = 0; i < n; i++)
	{
		printf("打印数组元素:%d\n", p[i]);
	}


	system("pause");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/Hello_MyDream/article/details/82667123