从函数返回局部变量
在下面的代码中,我返回一个指向函数内部本地创建的char
数组的指针。 因此,当返回值分配给y
,它应该都是垃圾。 当我打印%10s
或%100s
时,这似乎也适用。 但是当我打印%1000s
,我得到的输出似乎让我感到困惑。
#include char* get() { char x[1000] ; int i = 0; for(; i < 999; ++i) { x[i] = 'A'; } x[999] = '\0'; printf("%1000s\n",x); return x; } int main() { char* y = get(); printf("Going to print\n"); printf("%1000s\n",y); }
输出是
main()
函数访问用于创建本地函数char数组的相同内存位置是巧合还是更具体?
看看,一旦你使用 get()
的返回值,你就会面临未定义的行为 。
在那之后,没有任何保证。
换句话说, printf("%1000s\n",y);
的输出printf("%1000s\n",y);
##语句无法certificate 。 它是 ,它是什么。 未定义。
FWIW,一旦get()
函数执行了finsihed,为该函数分配的堆栈空间将被销毁并可供任何其他函数使用( 如果需要 )。 也许你正在未经授权进入 物理内存的那一部分,但事实并非如此。
## – 或, printf("%10s\n",y);
或printf("%100s\n",y);
无论如何,无论在何处访问 y
。