gpt4 book ai didi

c++ - 添加 printf 语句时出现运行时错误

转载 作者:行者123 更新时间:2023-11-30 21:37:16 25 4
gpt4 key购买 nike

为什么在添加 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 下运行代码清楚地表明您遇到了堆栈溢出。堆栈上的数组大小太大。

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上你可以看到它发出命令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 的返回值;)

关于c++ - 添加 printf 语句时出现运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35266177/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com