Рассмотрим следующий код:C - возвращает указатель обугленного без таНос
char* pointerTesting(void) {
char* test = "hello";
return test;
}
int main() {
char* string = pointerTesting();
printf("string: %s\n", string);
}
Это не имеет никаких проблем компиляции и запуска. Однако, по моему мнению, это не должно работать, поскольку память, выделенная указателю test
, находится в стеке и уничтожается при возврате на главную.
Итак, вопрос в том, как это удается работать без malloc в функции pointerTesting()?
См. Http://stackoverflow.com/questions/2589949/c-string-literals-where-do-they-go и множество похожих вопросов по этой теме в stackoverflow. – jman
* указатель * выделяется в стеке (для типичных реализаций), но вы не возвращаете указатель, а только копию, если его значение. Это похоже на 'int n = 42; return n; '. Это распределение того, что указывает на это. –