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
", *ptr);
ptr = #
printf("浣犺緭鍏ョ殑鏁存暟鏄�細%d
", *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;
}