Why I cannot free a malloc'd string?

c, constants, free, malloc, string

Solution

The line

s = ABC;

changes `s` to point to a different string which may well be in read-only memory. Attempting to free such memory results in undefined behaviour. A crash is likely.

I think you wanted

strcpy(s, ABC);

instead. This would copy the char array "abc" into `s`. Note that this will cause a further bug - `s` is too short and doesn't have space for the nul terminator at the end of `ABC`. Change you allocation to 4 bytes to fix this

char *s = malloc(4);

or use

char *s = malloc(sizeof(ABC));

if `ABC` is the max length you want to store.

Problem

I have this code: ``` #define ABC "abc" void main() { char *s = malloc(sizeof(char)*3); printf("%p ", s); s = ABC; printf("%p ", s); free(s); } ``` This is the output: `0x8927008 0x8048574 Segmentation fault (core dumped)` As you can see, the address of string s changes after assignment (I think this is why free() gives segfault). Can anyone explain me why and how this happens? Thank you!

Original source