Rozważmy następujący kod:C - zwraca wskaźnik char bez malloc
char* pointerTesting(void) {
char* test = "hello";
return test;
}
int main() {
char* string = pointerTesting();
printf("string: %s\n", string);
}
to nie ma problemu kompilacji i uruchamiania. Jednak w moim rozumieniu nie powinno to działać, ponieważ pamięć przydzielona do wskaźnika test
znajduje się na stosie i jest zniszczona po powrocie do głównej.
Tak więc pytanie brzmi, w jaki sposób to działa bez malloc w funkcji pointerTesting()?
Zobacz http://stackoverflow.com/questions/2589949/c-string-literals-where-do-they-go i kilka podobnych pytań na ten temat na stackoverflow. – jman
* Wskaźnik * jest przydzielany na stosie (dla typowych implementacji), ale nie zwracasz wskaźnika, tylko kopia, jeśli ma wartość. Jest podobny do 'int n = 42; return n; '. Jest to alokacja tego, co wskazuje na to, co jest istotne. –