1. c语言中动态分配和释放
在c中,申请动态内存是使用malloc和free,这两个函数是c的标准库函数,分配内存使用的是系统调用,使用它们必须包含stdlib.h,才能编译通过。
malloc后需要检查内存是否分配成功,free则要在指针不为空的情况下才能进行。
示例代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char *p = (char*)malloc(10);
if ( p == NULL)
{
printf("errorn");
}
strncpy(p, "23456", sizeof(p)-1);
printf("p=%sn", p);
if ( p != NULL)
{
free(p);
p = NULL;
}
return 0;
}
2. c++动态分配和释放
c++中,申请动态内存是使用new和delete,这两个关键字实际上是运算符,并不是函数。
需要注意的是:new的不是数组的话,则直接delete就好,并且只会调用一次析构函数,而new[]的话,则需使用delete[]来释放,并且数组中每一个元素都会调用一次析构函数,调用完析构函数再释放内存。
3. new/delete的底层实现
对于基本数据类型(无需构造函数)而言new是重载了new运算符&#