Am looking at the following program and not sure how the memory is allocated and why:
void function() {
char text1[] = \"SomeText\";
char* text2 = \"Some
// Array allocated on the stack and initialized with "SomeText" string.
// It has automatic storage duration. You shouldn't care about freeing memory.
char text1[] = "SomeText";
// Pointer to the constant string "Some Text".
// It has static storage duration. You shouldn't care about freeing memory.
// Note that it should be "a pointer to const".
// In this case you'll be protected from accidential changing of
// the constant data (changing constant object leads to UB).
const char* text2 = "Some Text";
// malloc will allocate memory on the heap.
// It has dynamic storage duration.
// You should call "free" in the end to avoid memory leak.
char *text = (char*) malloc(strlen("Some Text") + 1 );
Yes you are right, on most systems:
text1 will be a writable variable array on stack (it is required to be a writable array)
text2 has to be const char* actually, and yes, it will point to a text segment of the executable (but that might change across executable formats)
text will be on heap