No. hist_name
is leaked. unlink
won't free the parameter.
Create a file called "a" and run this code (Compile with gcc test.c
):
#include <unistd.h>
#include <stdlib.h>
int main(void){
char* hist_name=malloc(128);
//Fill hist_name
hist_name[0]='a';
hist_name[1]='\0';
unlink(hist_name);
}
In the following, to show you, that unlink doesn't free your allocated memory, I will use valgrind.
Valgrind is a tool that allows you to detect memory leaks and other memory issues (Like out-of-bounds accesses, use of uninitialized values,etc.)
So, if you run this program with valgrind (valgrind ./a.out
), you get this output:
==2155== Memcheck, a memory error detector
==2155== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==2155== Using Valgrind-3.16.1 and LibVEX; rerun with -h for copyright info
==2155== Command: ./a.out
==2155==
==2155==
==2155== HEAP SUMMARY:
==2155== in use at exit: 128 bytes in 1 blocks
==2155== total heap usage: 1 allocs, 0 frees, 128 bytes allocated
==2155==
==2155== LEAK SUMMARY:
==2155== definitely lost: 128 bytes in 1 blocks
==2155== indirectly lost: 0 bytes in 0 blocks
==2155== possibly lost: 0 bytes in 0 blocks
==2155== still reachable: 0 bytes in 0 blocks
==2155== suppressed: 0 bytes in 0 blocks
==2155== Rerun with --leak-check=full to see details of leaked memory
==2155==
==2155== For lists of detected and suppressed errors, rerun with: -s
==2155== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
definitely lost: 128 bytes in 1 blocks
This means, you allocated memory once, 128 bytes, but didn't free it. ==> unlink doesn't free your memory for you.