内存管理函数介绍
malloc的介绍
malloc是C语言内存管理函数的一种,通常配合free一起使用来防止内存泄漏.malloc返回的所指向位置的首地址,返回类型是void*.
如图:
下面上代码:
#include<iostream>
using namespace std;
#include<stdlib.h>
int main() {
int* p=(int*)malloc(sizeof(40));//用来申请40个字节的空间
if (p == NULL) {//为空指针则申请内存失败
cout << "开辟空间失败";
}
for (int i = 0; i < 10; i++) {//有了40个字节可以存放10个int类型数据
p = &i;
cout << *p;
}
free(p);//释放空间
p = NULL;
}
calloc的介绍
calloc相当于memset加malloc,calloc可以进行初始化并进行申请空间,而malloc只能原地申请,同样calloc返回类型也是void*,也需要在申请空间时进行强制转换类型。
如图:
调试前:
调试后:
初始化并申请空间
下面上代码:
int main() {
int* p = (int*)calloc(10,sizeof(int));
if (p == NULL) {
cout << "开辟空间失败";
}
for (int i = 0; i < 10; i++) {
p = &i;
cout << *p;
}
free(p);
p = NULL;
}
realloc的介绍
realloc分配空间有2种情况。realloc分配的空间足够时则返回的分配空间的首地址;分配的空间不够时则会释放原来的空间,造一个更大的空间并返回新空间的首地址。
如图:
下面上代码:
int main() {
int* p=(int *)malloc(8);
int* p1 = (int*)realloc(p, sizeof(int)*10);
if (p1 == NULL) {
cout << "开辟空间失败";
}
else {
p = p1;
}
for (int i = 0; i < 10; i++) {
p = &i;
cout << *p;
}
free(p1);
p1 = NULL;
return 0;
}