zoukankan      html  css  js  c++  java
  • c++内存分配(new和delete)

    c中malloc和free是函数,包含在stdlib.h头文件中,分配成功返回指针,失败返回空指针。

    与new的区别是:

    1,malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。
    2,对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。
    3,因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以一个能完成清理与释放内存工作的运算符delete。注意new/delete不是库函数。
    4,C++程序经常要调用C函数,而C程序只能用malloc/free管理动态内存。

    (摘自http://zhidao.baidu.com/link?url=IrwYsOm_ykBlbfF3DCsfeKwNj2bfwahMKa501_hS7cgrrNk5DAeu11devGzHpWv9NsfLmwlX6Bp14BjuNB-Exa)

    代码使用如下:
     1 #include <iostream>
     2 #include <fstream>
     3 #include<stdlib.h>
     4 #define MAXNUM 200
     5 int Isood(int n);
     6 
     7 using namespace std;
     8 
     9 
    10 int main(void)
    11 {
    12     int n;
    13     cout<<"input n:";
    14     cin>>n;
    15     
    16     int *p;
    17     p=(int *)malloc(n*sizeof(int));
    18     for(int i=0;i<n;i++)
    19     {
    20         p[i]=i;
    21     }
    22     for(int i=0;i<n;i++)
    23     {
    24         cout<<p[i]<<" ";
    25     }
    26     
    27     free(p);
    28 }
    #include <iostream>
    #include <fstream>
    #include<stdlib.h>
    #define MAXNUM 200
    int Isood(int n);
    
    using namespace std;
    
    
    int main(void)
    {
    	int *p=new int;
    	
    	int a=3;
    	p=&a;
    	cout<<*p<<endl;
    	delete p;
    //	cout<<*p;
    	int *q=new int [3];
    	q[0]=0;
    	q[1]=1;
    	*(q+2)=3;
    	cout<<q[0]<<endl;
    	cout<<*(q+2);
    	delete [] q;
    	
    
    }
    

      

  • 相关阅读:
    GUI编程
    网络编程
    线程池详解_3
    多线程详解_2
    注解和反射_1
    多线程详解_1
    javaEE简要总结
    MarkDown使用教程简单介绍
    com.sun.xxx.utils不存在问题的解决
    解决npm install安装慢的问题
  • 原文地址:https://www.cnblogs.com/wswang/p/5127334.html
Copyright © 2011-2022 走看看