动态内存管理
以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; }