考慮下面的代碼:Ç - 返回一個字符指針沒有的malloc
char* pointerTesting(void) {
char* test = "hello";
return test;
}
int main() {
char* string = pointerTesting();
printf("string: %s\n", string);
}
這有沒有問題編譯和運行。但是,在我的理解中,這不應該起作用,因爲分配給test
指針的內存在堆棧上,並且在返回到main時被破壞。
所以問題是,這是如何管理沒有malloc在pointerTesting()函數?
請參閱http://stackoverflow.com/questions/2589949/c-string-literals-where-do-they-go以及關於此主題在stackoverflow上的一堆類似問題。 – jman
*指針*在堆棧上分配(對於典型實現),但不返回指針,只有其值爲副本。它類似於'int n = 42;返回n;'。這就是它指向相關的分配。 –