在函数调用结束后不删除数组

问题描述 投票:0回答:2

在学校,老师告诉我,当对函数的调用结束时,在函数块中声明的所有内容都将被删除。但是我写了下面的代码:

int * secret()
{
    int arr[10]={0};
    arr[0]=9999;
    return arr;
}

int main() {
    printf("%d",secret()[0]);
    return 0;
}

并且输出为9999,不符合我所教的内容。

c function pass-by-reference c99 pass-by-value
2个回答
0
投票

不会被删除。它只是被释放。它说该数据是免费使用的,但是它将保留在那里,直到另一个程序覆盖它为止。


0
投票

在大多数实现中,函数结尾只是更改了堆栈指针,而没有清除实际数据。如果您需要清除数据,需要自己做。

© www.soinside.com 2019 - 2024. All rights reserved.