C++学习笔记2023-03-18

  • 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);

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容