delete()函数是C语言的库函数么

Python017

delete()函数是C语言的库函数么,第1张

delete()并不是C语言的库函数delete()在c++中经常用到,但是其实它本身和new对应,并不是函数,而是关键词在这里,和 sizeof 类似,new 和 delete 也不是函数,它们都是 C++ 定义的关键字,通过特定的语法可以组成表达式。和 sizeof 不同的是,sizeof 在编译时候就可以确定其返回值,new 和 delete 背后的机制则比较复杂。delete 就做了两件事情:调用 指向对象的析构函数,对打开的文件进行关闭。通过标准库函数 operator delete 来释放该对象的内存,传入函数的参数为 对象 的值。与new/delete不同,malloc()/free()才是标准库函数

在C++编程中,使用new分配的数组可用delete释放。这里释放的是动态分配的数组空间,而不是静态分配的数组空间,详细步骤:

1、例如,我们动态创建了一个一维int数组arr,现在需要将它释放。

2、这时只需要使用delete[]数组名即可。

3、注意,要释放数组所占的内存,[]不能少。否则,用delete则不能完全释放数组所占内存空间。

4、例如,我们为一个二维数组arr动态分配了内存空间。现在需要将它释放。

5、这时候,单单使用一句delete[]arr是不够的。

6、而是应该先释放为二维数组的每行分配的空间(即delete[]arr[i]),再释放为行指针分配的空间(即delete[]arr)。

7、经过这样两步,动态分配的二维数组空间才算彻底地释放。至于多维数组的释放,其本质和二维数组是相似的,可以参考二维数组的方法。下图为编译运行截图。可以看到,顺利执行,没有非法的内存访问,也没有报错。

void delete_student(student *L,long studentnum)

{

int flag = 0

student * p = L,*q = p->next

while(q)

{

if(q->number == studentnum)

{

flag = 1

q = q->next

break

}

else

{

p = q

q = q->next /*下一个结点*/

}

}

if(flag == 0)

printf("删除学生失败,不存在这个学号的学生\n")

else{

printf("删除学生成功! \n ")

}

}