当我在codechef上提交练习题时,我有一个非常奇怪的问题 . 解决方案“具有2D char数组的全局声明”被接受,而具有“主要功能内的声明”的解决方案被拒绝作为错误答案 .
以下是解决方案的链接 .
1)具有全球声明:http://www.codechef.com/viewsolution/1138654
2)在main()中有Delaration:http://www.codechef.com/viewsolution/1138660
PS1:我没有在主函数之外使用2D char数组 .
PS2:我在谈论数组" char boardString[1000][1000] ";
2 回答
因为你可能用完了堆栈空间 .
当您全局声明一个数组时,它会在data / Bss段中分配(注意这是实现细节)
而当你在
main()
中声明一个数组时,它会在堆栈上本地创建(同样是一个实现细节)由于您要分配的数组很大(
1000 X 10000
),因此可能会耗尽堆栈空间 .Codechef足够智能,可以检测到这个问题,因此它拒绝使用
main()
中的数组代码作为错误答案 .正如Als正确评论该问题很可能是由于堆栈空间限制 . 如果你更愿意将你的变量封装在
main
中但是不在堆栈中分配它,你只需要声明它static
,那里 .