动态内存管理
malloc 申请动态内存空间
free 释放动态内存空间
callioc 申请并初始化一系列内存空间
reallloc 重新分配内存空间
void *malloc(size_t size);
//void *malloc(size_t size); #include<iostream> #include<stdlib.h> using namespace std; int main(){ int *ptr; ptr=(int *)malloc(sizeof(int)); if(ptr==NULL){ printf("分配内存失败"); exit(1); } printf("请输入一个整数"); scanf("%d",ptr); printf("%d",*ptr); return 0; }
void free(void *ptr);
内存泄漏:
申请的空间没有释放:
#include <stdio.h> #include <stdlib.h> int main(void) { while (1) { malloc(1024); } return 0; }
丢失内存块地址
#include <stdio.h> #include <stdlib.h> int main() { int *ptr; int num = 123; ptr = (int *)malloc(sizeof(int)); if (ptr == NULL) { printf("鍒嗛厤鍐呭瓨澶辫触锛乗n"); exit(1); } printf("璇疯緭鍏ヤ竴涓暣鏁帮細"); scanf("%d", ptr); printf("浣犺緭鍏ョ殑鏁存暟鏄細%d\n", *ptr); ptr = # printf("浣犺緭鍏ョ殑鏁存暟鏄細%d\n", *ptr); free(ptr); return 0; }
ptr申请的地址只有自己知道,当指向num时候造成内存泄漏
malloc可以申请一块任意尺寸的空间:
#include <stdio.h> #include <stdlib.h> //申请可以存储若干整型数据的空间 int main() { int *ptr=NULL; int num,i; printf("请输入一个整数"); scanf("%d",&num); ptr=(int*)malloc(num*sizeof(int)) ; printf("输入 %d个整数",num); for(i=0;i<num;i++){ scanf("%d",&ptr[i]); } printf("结果"); for(i=0;i<num;i++){ printf("%d ",ptr[i]); } free(ptr); return 0; }
初始化内存空间
#include <stdio.h> #include<string.h> #include <stdlib.h> #define N 10 //申请可以存储若干整型数据的空间 int main() { int *ptr; 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]); } free(ptr); return 0; }
改进版calloc
#include <stdio.h> #include<string.h> #include <stdlib.h> #define N 10 //申请可以存储若干整型数据的空间 int main() { int *ptr; int i; ptr=(int*)calloc(N,sizeof(int)); if(ptr==NULL){ exit(1); } //memset(ptr,0,N*sizeof(int)); for(i=0;i<N;i++){ printf("%d",ptr[i]); } free(ptr); return 0; }
realloc函数
#include <stdio.h> #include<string.h> #include <stdlib.h> #define N 10 //申请可以存储若干整型数据的空间 int main() { int *ptr1=NULL; int *ptr2=NULL; //第一次申请的内存空间 ptr1=(int*)calloc(10,sizeof(int)) ; //第二次申请内存空间 ptr2=(int*)malloc(20*sizeof(int)); memcpy(ptr2,ptr2,10); free(ptr1); free(ptr2); return 0; } //1513
#include <stdio.h> #include<string.h> #include <stdlib.h> #define N 10 //申请可以存储若干整型数据的空间 int main() { int i,num; int count=0; int *ptr=NULL; printf("输入整数,输入-1结束"); do{ 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]); return 0; }