1

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

以下是解决方案的链接。

1) 有全局声明: http: //www.codechef.com/viewsolution/1138654
2) 在 main() 中有声明:http: //www.codechef.com/viewsolution/1138660

PS1:我没有在 main 函数之外使用 2D char 数组。
PS2:我说的是数组“char boardString[1000][1000]”;

4

2 回答 2

3

因为您可能会用完堆栈空间。

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

由于您分配的数组是巨大的(1000 X 10000),您可能会用完堆栈空间。
Codechef 足够聪明,可以检测到这个问题,因此它会拒绝包含数组的代码main()作为错误答案。

于 2012-06-22T07:39:55.827 回答
1

正如 Als 正确指出的那样,问题很可能是由于堆栈空间限制。如果您更喜欢将变量封装在内部main而不是在堆栈上分配它,那么您只需在此处声明它static

于 2012-06-22T08:16:10.940 回答