In the function second()
, the assignment word = "ab";
assigns a new pointer to word
, overwriting the pointer obtained through malloc()
. When you call free()
on the pointer later on, the program crashes because you pass a pointer to free()
that has not been obtained through malloc()
.
Assigning string literals does not have the effect of copying their content as you might have thought. To copy the content of a string literal, use strcpy()
:
strcpy(word, "ab");