当我在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]”;
答案 0 :(得分:3)
因为你可能用完了堆栈空间。
当您全局声明一个数组时,它会在data / Bss段中分配(注意这是实现细节)
然而,当你在main()
中声明一个数组时,它会在堆栈中本地创建(再次是一个实现细节)
由于您要分配的数组很大(1000 X 10000
),因此可能会耗尽堆栈空间
Codechef足够智能,可以检测到这个问题,因此它会拒绝main()
中带有数组的代码作为错误答案。
答案 1 :(得分:1)
正如Als正确评论这个问题很可能是由于堆栈空间限制。如果您希望将变量封装在main
内,而不是将其分配到堆栈上,则只需将其声明为static
,即可。