const char* test(bool i)
{
const char t[] = "aa\n";
const char* p = "bbb\n";
if(i)
return p;
return t;
}
int main(array<System::String ^> ^args)
{
printf(test(true));
printf(test(false));
return 0;
}
That returns something of sort:
bbb
%^&$^$%
It is clear that test(false) returns a pointer to a local variable. The question is that p is also local variable. Why the memory for "bbb\n" is not cleaned after the function returns. I thought const char[] is interpreted same way as const char* but it is not true as it seems.
Although p is a local variable, what it points to is not local - it is a compile-time string constant; it is legal to return that constant's address from a function.
t is different, because the compile-time string constant is copied into an automatic storage area, causing an undefined behavior on dereferencing the returned pointer.
p is a local variable, which you return by value, but points to a string literal, which resides in read-only memory, not in the automatic memory allocated for the method.
Returning t and the using it indeed results in undefined behavior.
Also, don't think of pointers and arrays to be equivalent.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With