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

当我在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)

3 years ago

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

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

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

3 years ago

正如Als正确评论该问题很可能是由于堆栈空间限制 . 如果你更愿意将你的变量封装在 main 中但是不在堆栈中分配它,你只需要声明它 static ,那里 .