Closed. This question is off-topic。它当前不接受答案。
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
3年前关闭。
为什么在最后添加
堆栈的大小取决于系统,在许多系统上,默认值是8MB,在UNIX / Linux上,您可以看到它发出commnad
正确的解决方案是动态分配数组:
记住要始终检查
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
3年前关闭。
为什么在最后添加
printf
语句时却给出运行时错误?并且在删除printf
语句之后,没有错误。#include <stdio.h>
#define MOD 1000000007
#define MAX 44721
int main() {
long long int test, i, j, store[1000009], n, m, x, a[1000006];
scanf("%lld", &test);
for (i = 0; i < 1000006; i++) {
store[i] = 1LL;
}
a[0] = 1;
for (j = 1; j < 1000006; j++) {
for (i = 1; i < MAX; i++) {
if (i % 2 == 0) {
store[i] = (store[i - 1] + store[i]) % MOD;
}
}
a[j] = store[MAX - 1];
}
printf("%lld", a[1]);
return 0;
}
最佳答案
首先,您应该选择一种语言,因为C与C ++不同。
由于您的代码是C,所以我的解决方案也将在C中。
在Valgrind cleary下运行代码表明您正在经历堆栈溢出。堆栈上的数组大小太大。
Valgrind输出:
==14228== Invalid write of size 4
==14228== at 0x100000DC7: main (prova.c:6)
==14228== Address 0x1038c062c is on thread 1's stack
==14228== in frame #0, created by main (prova.c:6)
堆栈的大小取决于系统,在许多系统上,默认值是8MB,在UNIX / Linux上,您可以看到它发出commnad
ulimit -a
。您可能要查看此post以获得有关堆栈和堆如何工作的更多信息。正确的解决方案是动态分配数组:
store = malloc(1000009 * sizeof(long long int));
if (store == NULL) {
// The memory allocation failed, exit
return(1);
}
a = malloc(1000006 * sizeof(long long int));
if (a == NULL) {
return(1);
}
记住要始终检查
malloc
的返回值;)08-16 11:38