为什么在bns函数中的数组 a大小不能定义为201,一旦定义为1000以下就会输出错误

如题所述

这个问题不是大小的问题,而是因为返回了一个非静态局部栈地址。
a数组在bns结束后就被释放了,所以返回这个地址是没有意义的。你可以把a数组定义为静态的,函数结束后还存在:
static char a[101];追问

那为什么我把大小变成1000以上的时能够正常运行

追答

释放内存只是通知系统:这块内存我不用了,其他程序可以占用了。在被其他代码改写之前,这块内存还是以前的内容,至于什么时候被改写,谁也不知道。
至于你所说的数组变大后能正常运行,是因为栈内存的分配是自上而下的,数组大了,数组起始的元素距离栈底就越远,释放以后被改写的几率就比小数组要小
可以说,"不要返回一个局部栈变量的地址" c语言的金科玉律了

追问

哦,明白了,谢谢

温馨提示:答案为网友推荐,仅供参考
相似回答
大家正在搜