如何正确使用malloc和free memory?

Ono*_*Ono 4 c c++ memory malloc free

我想知道什么是使用malloc和free的正确/标准方式.是否需要在释放后设置指针NULL?基本上,以下两种方式中的哪一种是正确的?

double* myPtr = (double*)malloc(sizeof(double)*5);
.....
free(myPtr);
Run Code Online (Sandbox Code Playgroud)

要么

double* myPtr = (double*)malloc(sizeof(double)*5);
.....
free(myPtr);
myPtr = NULL;
Run Code Online (Sandbox Code Playgroud)

或者它应该是使用malloc和free的其他方法吗?谢谢.

sim*_*onc 11

两者都很好.唯一的区别是如果你试图myPtr第二次释放,前一种方法会崩溃.

根据您使用的语言,该malloc线可以稍微整理一下.

sizeof(*myPtr)在以后重构时,使用不太容易出错.如果您使用的是C,那么演员也是不必要的

double* myPtr = malloc(sizeof(*myPtr)*5);
Run Code Online (Sandbox Code Playgroud)

正如WhozCraig所指出的,如果您使用的是C++,则可以使用更简单的方法来分配数组

 std::vector<double> ar(5);
Run Code Online (Sandbox Code Playgroud)

给你一个5 double秒的数组,如果需要的话会增加它的存储空间,当它超出范围时自动释放它的内存.


Vla*_*cow 7

没有必要在语句中将指针设置为NULL

myPtr = NULL;
Run Code Online (Sandbox Code Playgroud)

一方面,如果您尝试第二次释放指针,这可以防止程序执行错误.另一方面,它可能隐藏了第二次尝试释放指针的错误代码.

因此,是否需要将指针设置为NULL取决于程序设计.

如果您正在谈论C++,那么如果您使用永远不会使用C函数malloc并且是免费的话会更好.考虑使用智能指针,例如std :: shared_ptr.