On 26 July 2012 12:14, Michael Stapelberg <michael@xxxxxxxx> wrote:
Quoting Mateusz Loskot (2012-07-13 20:06:58)
I think you misunderstood me. What FREE does is it sets the pointer to1) You are not using FREE(last_urgent_ws);, but free(last_urgent_ws) in
line 1489, which is unsafe (it is not guaranteed that last_urgent_ws
is != NULL).
There is no such guarantee needed for free() as per the C99 Standard:
7.20.3.2 The free function
2 The free function causes the space pointed to by ptr to be
deallocated, that is, made
available for further allocation. If ptr is a null pointer, no action occurs.
NULL after calling free(). Therefore, the following code works fine:
FREE(last_urgent_ws);
// …things happen here, and much later:
FREE(last_urgent_ws);
While the following is not:
free(last_urgent_ws);
// …things happen here, and much later:
free(last_urgent_ws); // points to an old memory location