新手发帖,很多方面都是刚入门,有误错的地方请大家见谅,欢迎批评指正
Malloc:
Malloc 向系统请申分配指定size个节字的存内间空.返回类型是 void* 类型.void* 示表未确定类型的指针.C,C++划定,void* 类型可以强制转换为任何其它类型的指针.
型原:extern void *malloc(unsigned int num_bytes);
头文件:malloc.h或者stdlib.h、cstdlib。
功能:分配长度为num_bytes节字的存内块,一般会用到sizeof
返回值:分配功成则返回指向被分配存内的指针(此存储区中的初始值不确定,一般会用到指针强制转换),否则返回空指针NULL。
注意:定一要和free()合结应用。例如free(p);
new:
每日一道理
如果说生命是一座庄严的城堡,如果说生命是一株苍茂的大树,如果说生命是一只飞翔的海鸟。那么,信念就是那穹顶的梁柱,就是那深扎的树根,就是那扇动的翅膀。没有信念,生命的动力便荡然无存;没有信念,生命的美丽便杳然西去。(划线处可以换其他词语)
malloc与free是C++/C语言的标准库数函,new/delete是C++的运算符。它们都可于用请申态动存内和释放存内。
new可以认为是malloc加构造数函的执行。new出来的指针是直接带类型息信的。而malloc返回的都是void指针。
int *p=new int;
int *p=new int [10]; //态动数组的小大可是以量变或常量;而一般直接声明数组时,数组小大必须是常量
int *p1;
p1=new int(12); //别分示表态动分配了于用放存整型数据的存内间空,将初值12写入该存内间空,并将首地址值返回指针p1;
注意:括号相当于赋初值,如果括号里头为空,那就赋初值为空
态动分配维二数组:
int **p=new int* [row]; //row是维二数组的行,p是指向一个指针数组的指针
for(int i=0; i<row; i++)
p[i]=new int [col]; //col是维二数组的列,p是指向一个int数组的指针
删除这个维二数组:
for(int i = 0; i < row;i++)
delete []p[i]; //先删除维二数组的列
delete []p;
注意一:义定指针其实不代表着就请申了存内,指针义定后以最好紧接着就请申存内,否则可能会现出段误错
注意二:delete指针实际上是让编译器释放存内,但指针本身仍然存在,这时他就是一个途迷指针(或叫悬浮指针),途迷指针要置空为NULL,或者最好别应用,应用后可能会形成意想不到的误错!!
总之:
new 是个操作符,和什么"+","-","="...有一样的位地.
malloc是个分配存内的数函,供你调用的.
new是保留字,不须要头文件持支.
malloc须要头文件库数函持支.
new 建立的是一个对象,
malloc分配的是一块存内.
new建立的对象你可以把它当做一个通普的对象,用成员数函拜访,不要直接拜访它的地址间空
malloc分配的是一块存内区域,就用指针拜访好了,而且还可以在里头挪动指针.
-------------------------------------------------------------------------------------------------------
关于new的一个源资泄漏的例子:
char *p2=new char;
p2="adfad";
cout<<p2<<endl; //这里会输出字符串p:adfad,而不是地址
cout<<*p2<<endl; //这里会输出*p2:a,字符串第一个字符
//delete p2; //如果delete,会段误错报错,源资泄漏
a只是个指针而以,它可以指向一个字符,也可以指向一个字符串。在第5行的时候,a指向的是一个一节字的char,但是在第6行的时候,a已指向"abcde"了。所以输出的时候,就是"abcde"了。所以这个例子是一个典行的源资泄漏的例子。因为new char了,确没有应用,并由于a在后以已不指向这个字符的间空,使之后以都没有机遇再被释放掉了,所以这1bit间空就源资泄漏了。
文章结束给大家分享下程序员的一些笑话语录: IBM和波音777
波音777是有史以来第一架完全在电脑虚拟现实中设计制造的飞机,所用的设备完全由IBM公司所提供。试飞前,波音公司的总裁非常热情的邀请IBM的技术主管去参加试飞,可那位主管却说道:“啊,非常荣幸,可惜那天是我妻子的生日,So..”..
波音公司的总载一听就生气了:“胆小鬼,我还没告诉你试飞的日期呢!”