malloc:
malloc是什么:
malloc是一个函数,用于开辟空间时使用。其头文件在于malloc.h和stdlib.h。
malloc的使用:
格式为:(指针类型 *)malloc(sizeof(指针类型));
如果说我们所要开辟的空间有 n 个,则在sizeof前乘以相应的个数。
#include<iostream>
using namespace std;
int main()
{
int* a;
a = (int*)malloc(30 * sizeof(int));
return 0;
}
如果上述过程a开辟成功则指向开辟的空间,反之则返回NULL指针。
我们用以下方式对我们上述代码进行检测。
#include<iostream>
using namespace std;
int main()
{
int* a;
a = (int*)malloc(sizeof(int));
cout << "开辟空间后: ";
if (a == NULL) {
cout << -1 << endl;
}
else {
cout << 1 << endl;
}
return 0;
}
free:
free是什么:
free也是一个函数,其作用与malloc相反,用于释放空间时使用。其头文件在于malloc.h和stdlib.h。
free的使用:
free的格式:free(变量名);
最后要将其变为NULL,否则则为一个空指针。
free(a);
a=NULL;
我们为什么需要malloc、free:
当我们在存放数据时,为了使我们的内存适当而存在,不够则利用malloc进行空间的开辟,当我们删除一个数时则利用free来释放空间。
补充:
new:
在C++中我们有时会使用new来代替malloc进行使用。
定义非数组时:
int * a = new int ;//只定义没有初始化
int * b = new int (3);//给b初始化值为3;
定义数组时:
int * c = new int[3];//定义了一个数量为3的数组
delete:
delete用于释放new所创造的内存。
释放非数组时:
delete a ;
a = NULL ;
释放数组时:
delete [] c ;
c = NULL ;
new和malloc的区别(了解):
1、new/delete是C++的操作符,而malloc/free是库函数;
2、new在调用时会先为对象分配内存,再调用对象的构造函数,而malloc不会
3、使用malloc为对象指针分配内存,要明确指定分配内存的大小,而new不需要
4、new作为操作符,可以被视为重新定义,而malloc不行
5、new分配内存成功,则返回对象指针;而malloc分配成功会返回void*类型指针
6、new如果分配内存失败会抛出bad_alloc异常;而malloc分配内存失败会返回NULL指针
7、new从自由存储区为对象分配内存;malloc从堆上分配(堆区在未初始化的数据区之后开始)内存