2D char数组的全局和局部声明

时间:2012-06-22 07:38:25

标签: c++ c arrays data-structures multidimensional-array

当我在codechef上提交练习题时,我有一个非常奇怪的问题。 “具有全局声明2D字符数组”的解决方案被接受,而具有“主要功能内部声明”的解决方案被拒绝作为错误答案。

以下是解决方案的链接。

1)获得全球声明:http://www.codechef.com/viewsolution/1138654
2)在main()内部进行分层:http://www.codechef.com/viewsolution/1138660

PS1:我没有在主函数之外使用2D char数组。
PS2:我在谈论数组“char boardString [1000] [1000]”;

2 个答案:

答案 0 :(得分:3)

因为你可能用完了堆栈空间。

当您全局声明一个数组时,它会在data / Bss段中分配(注意这是实现细节
然而,当你在main()中声明一个数组时,它会在堆栈中本地创建(再次是一个实现细节

由于您要分配的数组很大(1000 X 10000),因此可能会耗尽堆栈空间 Codechef足够智能,可以检测到这个问题,因此它会拒绝main()中带有数组的代码作为错误答案。

答案 1 :(得分:1)

正如Als正确评论这个问题很可能是由于堆栈空间限制。如果您希望将变量封装在main内,而不是将其分配到堆栈上,则只需将其声明为static,即可。