堆内存就是在程序的运行过程中根据需要而动态分配的一块内存,因此这种内存分配方式是动态分配,而不是静态分配(如:数组)。
申请分配内存的方式
从内存中申请分配内存的方法有以下两种:
(1)利用malloc函数
格式是:void * malloc(字节数)
该函数如分配内存成功,则返回其起始地址,否则返回NULL。当程序中使用malloc函数动态分配内存时,应该在程序的头部嵌入相应的头文件:#include <stdlib.h>
如:int *p;
p=(int *)malloc(sizeof(int));
student *ps;
ps=(student *)malloc(sizeof(student));
(2)利用new运算符:
格式1:指针变量名=new 类型标识符;
格式2:指针变量名=new 类型标识符(初始值);
格式3:指针变量名=new 类型标识符[内存单元个数];
功能:如果分配内存成功,则返回其起始地址,否则返回0
注意:格式1和格式2都是申请分配某一数据类型所占字节数的内存空间;但是在内存分配成功后,同时将一初值存放到该内存单元中;而格式3可同时分配若干个内存单元,相当于形成一个动态数组。
如:int *p,*q;
student *r;
p=new int; //申请分配1个int类型的内存空间(4个字节)
p=new int(10); //申请1个int类型的内存空间,同时将该
内存单元中放置值10
q=new int[100]; //申请分配100个int类型的内存空间(200B)
r=new student; //申请分配1个student类型的内存空间
(sizeof(student)个字节)
两种方法的区别:使用malloc函数分配内存时,其返回值要经过类型转换后才可赋给一个指针变量,而利用new分配内存时则不需要类型转换。
释放内存的方式
在C++语言中,当不再使用动态分配的内存空间时,可以将这部分内存释放,以方便其他程序代码使用。
(1)利用free函数。
格式:free(起始内存地址);
使用时应嵌入相应的头文件:#include <stdlib.h>
(2)利用delete运算符:
格式1:delete 指针变量名;
格式2:delete [ ] 指针变量名;
说明:格式1可释放某一个内存单元;而格式2可释放若干个内存单元的空间。如:
#include <iostream.h>
#include <stdlib.h>
void main()
{ int *number,*p,*q;
number=new int[100]; //申请分配100个int类型所占内存空间
p=new int; //申请分配一个int类型所占内存空间(2个字节)
q=(int *)malloc(10*sizeof(int)); //申请分配10个int类型所占内存空间
if (number==NULL || p==NULL || q==NULL)
cout<<"内存分配失败"<<endl;
else
cout<<"内存分配成功"<<endl;
//程序的其它部分
delete []number; //释放number所指向的所有内存空间
delete p; //释放p所指向的所有内存空间
free (q); //释放q所指向的所有内存空间
}
申请分配内存的方式
从内存中申请分配内存的方法有以下两种:
(1)利用malloc函数
格式是:void * malloc(字节数)
该函数如分配内存成功,则返回其起始地址,否则返回NULL。当程序中使用malloc函数动态分配内存时,应该在程序的头部嵌入相应的头文件:#include <stdlib.h>
如:int *p;
p=(int *)malloc(sizeof(int));
student *ps;
ps=(student *)malloc(sizeof(student));
(2)利用new运算符:
格式1:指针变量名=new 类型标识符;
格式2:指针变量名=new 类型标识符(初始值);
格式3:指针变量名=new 类型标识符[内存单元个数];
功能:如果分配内存成功,则返回其起始地址,否则返回0
注意:格式1和格式2都是申请分配某一数据类型所占字节数的内存空间;但是在内存分配成功后,同时将一初值存放到该内存单元中;而格式3可同时分配若干个内存单元,相当于形成一个动态数组。
如:int *p,*q;
student *r;
p=new int; //申请分配1个int类型的内存空间(4个字节)
p=new int(10); //申请1个int类型的内存空间,同时将该
内存单元中放置值10
q=new int[100]; //申请分配100个int类型的内存空间(200B)
r=new student; //申请分配1个student类型的内存空间
(sizeof(student)个字节)
两种方法的区别:使用malloc函数分配内存时,其返回值要经过类型转换后才可赋给一个指针变量,而利用new分配内存时则不需要类型转换。
释放内存的方式
在C++语言中,当不再使用动态分配的内存空间时,可以将这部分内存释放,以方便其他程序代码使用。
(1)利用free函数。
格式:free(起始内存地址);
使用时应嵌入相应的头文件:#include <stdlib.h>
(2)利用delete运算符:
格式1:delete 指针变量名;
格式2:delete [ ] 指针变量名;
说明:格式1可释放某一个内存单元;而格式2可释放若干个内存单元的空间。如:
#include <iostream.h>
#include <stdlib.h>
void main()
{ int *number,*p,*q;
number=new int[100]; //申请分配100个int类型所占内存空间
p=new int; //申请分配一个int类型所占内存空间(2个字节)
q=(int *)malloc(10*sizeof(int)); //申请分配10个int类型所占内存空间
if (number==NULL || p==NULL || q==NULL)
cout<<"内存分配失败"<<endl;
else
cout<<"内存分配成功"<<endl;
//程序的其它部分
delete []number; //释放number所指向的所有内存空间
delete p; //释放p所指向的所有内存空间
free (q); //释放q所指向的所有内存空间
}