zoukankan      html  css  js  c++  java
  • 动态内存管理

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

      

     

  • 相关阅读:
    分布式存储之GlusterFS
    应用中间件服务-weblogic
    生产环境tomcat升级新版本(tomcat漏洞修复)
    代码版本管理工具-gitlab
    链路追踪-skywalking
    去年前端校招面试的一些经验(阿里美团爱奇艺)
    mantis提交问题时报APPLICATION ERROR #27异常
    mantis无法上传附件,core/file_api.php: 1023异常
    centos7.2下安装mantis2.19.0
    linux常用命令
  • 原文地址:https://www.cnblogs.com/helloworld2019/p/11161005.html
Copyright © 2011-2022 走看看