动态内存管理
以mem开头的函数,初始化内存空间
memset–使用一个常量字节填充内存空间
memcpy–拷贝内存空间
memmove–拷贝内存空间
menchr–在内存空间中搜索一个字符
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 10
int main()
{
int *ptr = NULL;
int i;
ptr = (int *)malloc(N * sizeof(int));
if(ptr == NULL)//申请内存失败会退出,一般不会失败
{
exit(1);
}
memset(ptr,0,N * sizeof(int));//初始化申请的内存,第一个为标志位,第二个为初始化的内容,第三个为初始化内存的大小
for(i = 0; i< N; i++)
{
printf("%d",ptr[i]);
}
putchar('\n');
free(ptr);
return 0;
}
输出
十个0
calloc 函数与malloc函数的一个重要区别
1、calloc函数在申请完内存后,自动初始化该内存空间为零
2、malloc函数不进行初始化操作,里面数据是随机的
**
内存拷贝
**
memcpy
例:
memcpy(ptr2,ptr1,10);//将ptr1内存数据拷贝到ptr2中,大小为10
智能申请动态内存的函数
realloc
下面举例:输入任意个数,直到输入-1才停止并打印出以上输入的数
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i,num;
int count = 0;
int *ptr = NULL;、//注意这里必须初始化为NULL
do
{
printf("请输入一个整数(输入-1表示结束)");
scanf("%d",&num);
count++;
ptr = (int *)realloc(ptr, count * sizeof(int));
if (ptr == NULL)
{
exit(1);
}
ptr[count-1] = num;
} while(num != -1);
printf("输入的整数分别是 :");
for (i = 0; i < count; i++)
{
printf("%d",ptr[i]);
putchar('\n');
free(ptr);
return 0;
}