1
hahastudio 2015-07-12 11:22:37 +08:00
|
2
znoodl 2015-07-12 11:27:32 +08:00
这么大居然不用new/malloc
|
3
DIJ OP @hahastudio
其实刚才找到了,但是本来就是开在函数外部的数组,加了 static 的效果是本来在输入数据前报错,现在在输入之后报错...... vector 竞赛貌似并不能用......以前在 Windows / Linux 下完全没有这种问题...... |
4
kzzhr 2015-07-12 11:59:58 +08:00
函数体内的数组会放在栈中,一般会爆。
可以强制改一下,(竞赛允许改这个。至于vector还是算了,会慢哭你的) #pragma comment(linker, "/STACK:1024000000,1024000000") 不过还是推荐使用malloc/calloc把数组放在堆上或者开全局 |
5
yksoft1 2015-07-12 13:20:44 +08:00
记得ACM学习里面有专门提到如何有效实现大内存分配
|
6
aheadlead 2015-07-12 13:56:09 +08:00
你或许是定义在某个函数里面吧
int main() { int arr[2000][2000]; // segmentation fault here return 0; } 一个 int 变量占用 8 字节空间 2000 * 2000 * 8 = 32000000B = 30.517578125MB 你用 ulimit -s 看看栈大小,应该是比 30 要小。 Workaround int arr[2000][2000]; int main() { return 0; } 全局变量存在于静态区,这样就没有爆栈的问题了。 |
7
aheadlead 2015-07-12 13:56:25 +08:00
妈蛋 回复不能用markdown吗
|
8
lirau 2015-07-12 14:14:48 +08:00
简单来讲 内存分配分为堆栈两种 你可能是局部产量超过栈的大小了
|