-
new和delete运算符学习笔记
int *p = new int[10]; //分配10个int型的内存空间
1.new int[10]不可以写成 int new[10]
正确的语法是 int* new = new int[10]。其中,new int[10]用于在堆上分配一个包含10个整数的数组,并返回数组的首个元素的指针,而int* new声明了一个指针变量new,并将其初始化为指向这个数组的第一个元素的指针。
delete[] p;
2.delete[] p不可以写成delete[p]
- delete[] p可以写成delete[]p(可以写成delete[]p,但是为了增强代码的可读性,建议在delete和数组名之间添加空格,即写成delete[] p。)
正确的用法是delete[] p,中括号需要放在delete关键字的后面,表示释放一个数组。如果写成delete[p],则会被解释为“在p指向的地址处调用一个名为operator delete[]的函数”,这不是正确的语法,可能会导致未定义的行为。
3.在C语言中,动态分配内存用 malloc() 函数,释放内存用 free() 函数。如下所示:
int *p = (int*) malloc( sizeof(int) * 10 ); //分配10个int型的内存空间
free(p); //释放内存
free() 函数用于释放动态分配的内存空间。在程序中使用 malloc() 或 calloc() 分配内存后,应该使用 free() 函数将其释放,避免内存泄漏和浪费。free() 函数接受一个指针参数,指向要释放的内存区域的起始地址,然后将该内存区域标记为可用状态,以便下次 malloc() 或 calloc() 分配时可以重新使用。释放已经释放过的内存或非动态分配的内存会导致程序崩溃,因此应该避免这种情况的发生。
1.malloc函数函数定义
其函数原型为void malloc(unsigned int size);其作用是在内存的动态存储区中分配一个长度为size的连续空间。 2.此函数的返回值是分配区域的起始地址,或者说,此函数是一个指针型函数,返回的指针指向该分配域的开头位置。
3.因此如下(需要 (type*)
强制转换成相应类型的指针)
type *var_name = (type*)malloc(sizeof(type)*num);