我保证以前有人问过这个问题,但我无法通过搜索找到它;提前对任何裁员感到抱歉。
我的(可能是错误的)理解是,只有在编译时知道对象的大小时才分配给堆栈。因此,在初始化数组的情况下,您可以执行以下操作之一(这应该在堆栈上):
char charArray[50];
由于该数组的大小在编译时是已知的,因此应该没有问题。
另一方面,这(我相信)也是有效的代码:
char anotherCharArray[someVariable + 50];
这也会进入堆栈吗?如果你 free() this,我很确定代码会出现段错误,所以它让我认为它确实如此,但它对我来说真的没有意义。同样,当通过 malloc 分配数据时,您必须使用 free() 的 100% 唯一情况吗?
在此先感谢您的帮助。