在本主题中,我们将学习C++中的 free()函数和 delete 运算符。
free()函数在C++中用于动态取消分配内存。它基本上是C++中使用的库函数,并且在stdlib.h头文件中定义。当指针指向使用malloc()函数分配的内存或Null指针时,将使用此库函数。
假设我们已经声明了一个指针" ptr",现在,我们想取消分配它的内存:
链接:https://www.learnfk.comhttps://www.learnfk.com/c++/free-vs-delete-in-cpp.html
来源:LearnFk无涯教程网
free(ptr);
上面的语法将取消分配指针变量" ptr"的内存。
在以上语法中,ptr是free()函数内部的参数。 ptr是指向使用malloc(),calloc()或realloc函数分配的内存块的指针。该指针也可以为null或使用malloc分配但不指向任何其他内存块的指针。
free()函数不返回任何值。它的主要功能是释放内存。
通过示例让我们理解。
#include <iostream> #include <cstdlib> using namespace std; int main() { int *ptr; ptr = (int*) malloc(5*sizeof(int)); cout << "Enter 5 integer" << endl; for (int i=0; i<5; i++) { // *(ptr+i) can be replaced by ptr[i] cin >>ptr[i]; } cout << endl << "User entered value"<< endl; for (int i=0; i<5; i++) { cout <<*(ptr+i) << " "; } free(ptr); /* 在 ptr 空闲后打印一个垃圾值 */ cout << "Garbage Value" << endl; for (int i=0; i<5; i++) { cout << *(ptr+i)<< " "; } return 0; }
上面的代码显示了free()函数如何与malloc()一起工作。首先,我们声明整数指针* ptr,然后使用malloc()函数将内存分配给该指针变量。现在,ptr指向5个整数的未初始化存储块。分配内存后,我们使用free()函数破坏此分配的内存。当我们尝试打印由ptr指向的值时,会得到一个垃圾值,这意味着内存已被取消分配。
输出
让我们看看free()函数如何与calloc一起工作。
#include <iostream> #include <cstdlib> using namespace std; int main() { float *ptr;//浮动指针声明 ptr=(float*)calloc(1,sizeof(float)); *ptr=6.7; std::cout << "The value of *ptr before applying the free() function : " <<*ptr<< std::endl; free(ptr); std::cout << "The value of *ptr after applying the free() function :" <<*ptr<< std::endl; return 0; }
在上面的示例中,我们可以观察到free()函数与calloc()一起工作。我们使用calloc()函数将内存块分配给浮点指针ptr。我们为ptr分配了一个内存块,该内存块可以具有单个浮点类型值。
输出:
让我们看看另一个示例。
#include <iostream> #include <cstdlib> using namespace std; int main() { int *ptr1=NULL; int *ptr2; int x=9; ptr2=&x; if(ptr1) { std::cout << "Pointer is not Null" << std::endl; } else { cout<<"Ponter is NULL"; } free(ptr1); //free(ptr2);//如果执行此语句,则会给出运行时错误。 return 0; }
上面的代码显示了free()函数如何与NULL指针一起工作。我们声明了两个指针,即ptr1和ptr2。我们为指针ptr1分配NULL值,为指针ptr2分配x变量的地址。当将free(ptr1)函数应用于ptr1时,分配给ptr的存储块将成功释放。语句free(ptr2)显示运行时错误,因为未使用malloc或calloc函数分配分配给ptr2的内存块。
它是 C++编程语言中使用的运算符,用于动态地取消分配内存。该运算符主要用于使用新运算符分配的那些指针或NULL指针。
delete pointer_name
例如,如果我们使用new运算符将内存分配给指针,现在我们要删除它。要delete指针,我们使用以下语句:
delete p;
要删除数组,我们使用以下语句:
delete [] p;
与delete运算符有关的一些重要要点是:
让我们看一下删除运算符的简单示例。
#include <iostream> #include <cstdlib> using namespace std; int main() { int *ptr; ptr=new int; *ptr=68; std::cout << "The value of p is : " <<*ptr<< std::endl; delete ptr; std::cout <<"The value after delete is : " <<*ptr<< std::endl; return 0; }
在上面的代码中,我们使用new运算符分配内存,因此我们使用delete ptr运算符销毁由指针ptr指向的内存块。
输出
让我们看看删除如何与一系列对象一起工作。
#include <iostream> using namespace std; int main() { int *ptr=new int[5]; //使用 new 运算符分配内存。 std::cout << "Enter 5 integers:" << std::endl; for(int i=1;i<=5;i++) { cin>>ptr[i]; } std::cout << "Entered values are:" << std::endl; for(int i=1;i<=5;i++) { cout<<*(ptr+i)<<endl; } delete[] ptr;//删除ptr指向的内存块。 std::cout << "After delete, the garbage value:" << std::endl; for(int i=1;i<=5;i++) { cout<<*(ptr+i)<<endl; } return 0; }
输出
以下是C++中delete和free()之间的区别:
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)