动态内存管理

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
View Code

 

#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;
}

  

 

posted @ 2019-07-09 23:00  Hello_World2020  阅读(256)  评论(0编辑  收藏  举报