c语言c++的内存分配

来源:互联网 发布:浏览器广告拦截软件 编辑:程序博客网 时间:2024/05/17 06:28


c语言和c++的内存分配,静态分配自然不用说,主要是动态分配机制。

        用到的函数主要是malloc,new,realloc,主要是三个。

        主要讲的是三种函数的不同的使用方法和效果,先说malloc,是c语言的内存分配函数,需要使用强制转换数据类型,而且需要手动计算分配内存的字节(sizeof函数)空间,new是c++的内存分配自制,可以自动识别数据类型,而且能自动计算需要分配的内存,如 int *a = new int,则分配的内存为sizeof(int),如果是int *a= new int [100],则分配sizeof(int*100)的内存空间,这个两个都用于生成新的内存空间,返回的是新生成的内空间的地址指针,

               例如采用如下用法,

                struct Type *t;  //定义Type类型数据

                TypeInit(t);  //初始化t

                而在TypeInit函数中用malloc或者new分配内存空间;

                t=(Type *)malloc(sizeof(Type));  //这样的做的结果是对t没有任何影响

                可以换成返回Type *的类型函数,再用t=TypeInit();  //这样初始化完全ok.

                 而realloc是重新分配内存空间,需要手动计算内存空间,既然是重新分配,肯定是已经存在这个指针,例如如下,

int *a=new int[100] ;   int *b=NULL;b=a;b=(int *)realloc((int *)b,sizeof(int)*101);if(b==NULL)cout<<"内存分配失败"<<endl;a=b;

        添加指针b是免得在重新分配内存空间时,破坏了原有的a的内存空间分配,可以直接使用

         a=(int *)realloc((int *)a,sizeof(int)*101);       
         这样的a指针前面100*sizeof(100)的内容就还是原来的内容,但是如果使用new或者malloc的话就全部都是新的内存。 
         至于指针的释放就直接使用free或者delete函数就ok了!

          如果有人再浏览的过程中发现任何问题,希望能够留言指出,大家共同学习!

原创粉丝点击