提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
堆内存空间是程序运行时(而非编译时)所动态申请的内存空间;
c程序中申请堆内存空间,一般用malloc+free,他们是函数;
c++程序中申请堆内存空间,一般用new+delete,他们是运算符;
一、malloc 和 free
malloc 函数原型: void *malloc(size_t size);
该函数从堆内存中申请一块size大小的内存,将指向该内存的地址返回。
free函数原型: void free(void *);
函数free返回由malloc()函数分配的堆内存。free()参数是先前调用malloc()函数时返回的地址;
二、new 和 delete
new和delete是c++专有的操作符,不用头文件声明。
new 类型[(初值)] / new 类型[(unsigned 表达式)]
delete 指针变量名
三、相关代码
//#define code_malloc
#define code_new
int main()
{
int size;
int* data;
cout << "请输入一个数: \n";
cin >> size;
#ifdef code_malloc
if ((data = (int *)malloc(size*sizeof(int))) == NULL ) {
cout << "allocate memory dailed!\n";
exit(1);
}
#endif
#ifdef code_new
if ((data = new int[size]) == NULL) {
cout << "allocate memory dailed!\n";
exit(1);
}
#endif
for (int count = 0; count<size; count++) {
data[count] = count * 3;
}
for (int count =0; count<size; count++) {
printf("\ndata_ %d ", data[count]);
}
#ifdef code_malloc
free(data);
data = NULL;
#endif
#ifdef code_new
delete[]data; //释放内存
data = NULL;
#endif
}
总结
- c++中要使用new 和 delete;
- 用完一定要释放;
- int *p = new int[10];
delete p; //只能释放第一个,后面9个都无法释放,产生运行错误(内存泄漏);
delete []p; 才是正确的释放方式;