Search code examples
c++cmallocfreesecure-coding

How to correctly use malloc and free memory?


I am wondering what is the right/standard way to use malloc and free. Is it needed to set pointer NULL after free? Basically, which of the two following ways is correct?

double* myPtr = (double*)malloc(sizeof(double)*5);
.....
free(myPtr);

or

double* myPtr = (double*)malloc(sizeof(double)*5);
.....
free(myPtr);
myPtr = NULL;

Or it should be other ways to use malloc and free? Thanks.


Solution

  • Both are fine. The only difference is that the former approach would crash if you tried to free myPtr a second time.

    Depending on the language you're using, the malloc line could be tidied up a little.

    Using sizeof(*myPtr) is less prone to bugs when you later refactor. If you're using C, the cast is also unnecessary

    double* myPtr = malloc(sizeof(*myPtr)*5);
    

    As pointed out by WhozCraig, if you're using C++, there are much easier ways to allocate an array

     std::vector<double> ar(5);
    

    gives you an array of 5 doubles that will grow its storage if required and automatically free its memory when it goes out of scope.