在学校,老师告诉我,当对函数的调用结束时,在函数块中声明的所有内容都将被删除。但是我写了下面的代码:
int * secret()
{
int arr[10]={0};
arr[0]=9999;
return arr;
}
int main() {
printf("%d",secret()[0]);
return 0;
}
并且输出为9999,不符合我所教的内容。
不会被删除。它只是被释放。它说该数据是免费使用的,但是它将保留在那里,直到另一个程序覆盖它为止。
在大多数实现中,函数结尾只是更改了堆栈指针,而没有清除实际数据。如果您需要清除数据,需要自己做。