一、什么是malloc函数
1.malloc
是c标准库中提供的一个普通函数,分配一块连续的内存,并常与free函数一起使用。(free函数的作用是释放创建的空间)
2.malloc的返回值
malloc 返回一个指向分配空间的 void 指针,如果可用内存不足,则返回 NULL。 要返回指向除 void 类型以外的类型的指针,请对返回值使用类型转换。
返回值指向的存储空间保证适当对齐以存储任何类型的对象。 如果 size 为 0,malloc 在堆中分配一个长度为零的项目并返回一个指向该项目的有效指针。 始终检查 malloc 的返回值,即使请求的内存量很小。
malloc的返回值是一个指针,指向一段可用内存的起始位置,指向一段可用内存的起始地址,多次调用malloc所分配的地址不能有重叠部分,除非某次malloc所分配的地址被释放掉malloc应该尽快完成内存分配并返回(不能使用NP-hard的内存分配算法)实现malloc时应同时实现内存大小调整和内存释放函数(realloc和free)
3.创建方式
p=(type*)malloc(sizeof(type)) (type*)是需要创建的数据类型的指针,sizeof(type)是创建数据类型的空间大小。当内存不再使用时,使用free()函数释放空间。
//创建int类型的内存空间
int*p=(int*)malloc(sizeof(int)*num);
(1)
malloc函数的作用是在内存中找到一段指定内存空间,并把起始位置的地址返回。而这一段内存空间可以是一个单独的指针,也可以是数组指针的首元素的地址。并且,这段空间在逻辑上是连续的,但在物理空间上可能不连续。
(2)释放空间
free(p)
二、memset函数
1.memst()
memset的作用是将某一块内存中的内容全部设置为指定的值。通常用于为新申请的内存做初始化工作。(作用的对象是一块内存)
dest为内存的地址,int c是赋予的值,size_t count是需要赋值的字节长度。
#include <memory.h>
#include <stdio.h>
void main()
{
char buffer[] = "This is a test of the memset function";
printf( "Before: %s\n", buffer );
memset( buffer, '*', 4 );
printf( "After: %s\n", buffer );
}
Output
Before: This is a test of the memset function
After: **** is a test of the memset function
2.清空内容
struct student
{
char name[20];
int age;
char sex[10];
};
struct student zhangsan={"张三",20,"男"};
//清空结构体的内容
memset(&zhangsan,0,sizeof(student);
int arr[10]={0};
memset(&arr,0,sizeof(arr));