C 当我在程序崩溃时使用int或unsigned long long时,数组索引0到4000000可以使用什么数据类型
求fibonnaci级数的偶数C 当我在程序崩溃时使用int或unsigned long long时,数组索引0到4000000可以使用什么数据类型,c,arrays,C,Arrays,求fibonnaci级数的偶数 #include <stdio.h> #include <stdlib.h> int main() { int a[4000000]; int sum=0; int i; for(i=0;i<4000000;i++) { if(i==0) { a[0]=1; } else if(i==1) {
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[4000000];
int sum=0;
int i;
for(i=0;i<4000000;i++)
{
if(i==0)
{
a[0]=1;
}
else if(i==1)
{
a[1]=2;
}
else
{
a[i]=a[i-1]+a[i-2];
}
if(a[i]%2==0)
{
sum+=a[i];
}
//printf("a[%d]=%d\n",i,a[i]);
}
printf("sum=%d\n",sum);//
return 0;
}
#包括
#包括
int main()
{
INTA[4000000];
整数和=0;
int i;
对于(i=0;i1){
printf(“%d%d”,x,y);
如果(限制>2){
而(i大多数实现对堆栈帧的大小有一个相当小的限制。如果您需要一个大数组,请将其设置为静态或动态分配
static int a[4000000];
大多数实现对堆栈帧的大小有一个相当小的限制。如果您需要一个大数组,请将其设置为静态或动态分配
static int a[4000000];
在大多数系统中,局部变量是在堆栈上分配的。堆栈的大小有限,因此创建一个巨大的数组作为局部变量会使堆栈溢出
而是使用动态内存,如:
int* a = malloc(4000000 * sizeof *a);
if (a == NULL)
{
// no more memory
exit(1);
}
// Now a can be used as an array, e.g. a[1234] = 42
... put your code here
// When done, deallocate memory like:
free(a);
这就是说,使用这么大的数组没有意义。简单的整数类型不能保存这么多斐波那契数的值。计算中会出现整数溢出,您的结果将是错误的。您可以使用int a[100]来检查这一点然后打印计算出的值。你很快就会发现它们是错误的。在大多数系统中,局部变量是在堆栈上分配的。堆栈的大小有限,因此创建一个巨大的数组作为局部变量会使堆栈溢出
而是使用动态内存,如:
int* a = malloc(4000000 * sizeof *a);
if (a == NULL)
{
// no more memory
exit(1);
}
// Now a can be used as an array, e.g. a[1234] = 42
... put your code here
// When done, deallocate memory like:
free(a);
这就是说,使用这么大的数组没有意义。简单的整数类型不能保存这么多斐波那契数的值。计算中会出现整数溢出,您的结果将是错误的。您可以使用int a[100]来检查这一点;
然后打印计算值。您很快就会发现它们是错误的。如果由于某些原因必须使用自动存储变量,请增加堆栈大小
例如:
int SeStack(rlim_t size)
{
struct rlimit rlim;
if(!getrlimit(RLIMIT_STACK, &rlim))
{
if (rlim.rlim_cur <= size)
{
rlim.rlim_cur = size;
return setrlimit(RLIMIT_STACK, &rlim);
}
else
{
return 0;
}
}
return EPERM;
}
int SeStack(rlim\t大小)
{
结构rlimit-rlim;
if(!getrlimit(RLIMIT_STACK,&rlim))
{
if(rlim.rlim_cur如果您必须(出于某些原因)使用自动存储变量-增加堆栈大小
例如:
int SeStack(rlim_t size)
{
struct rlimit rlim;
if(!getrlimit(RLIMIT_STACK, &rlim))
{
if (rlim.rlim_cur <= size)
{
rlim.rlim_cur = size;
return setrlimit(RLIMIT_STACK, &rlim);
}
else
{
return 0;
}
}
return EPERM;
}
int SeStack(rlim\t大小)
{
结构rlimit-rlim;
if(!getrlimit(RLIMIT_STACK,&rlim))
{
if(rlim.rlim_cur)对于堆栈来说可能太大了。最好分配动态内存。编译不是为了运行。您的代码在运行时会崩溃。UNIX上的堆栈大小通常为8 MiB,Windows上则更小。您试图分配接近16 MiB的内存;随后会发生崩溃。将变量设为全局变量,或使用动态内存(malloc()
et al)。与您观察到的崩溃无关,但最常见的是索引数组(未签名的!)size\t
将是选择的类型。它对于堆栈来说可能太大。最好分配动态内存。不运行编译。您的代码在运行时会崩溃。UNIX上的堆栈大小通常为8 MiB,Windows上的堆栈大小通常较小。您尝试分配接近16 MiB的内存,然后会发生崩溃。请将变量设为全局变量,或使用动态内存(malloc()
等)。与您观察到的崩溃无关,但最常用的索引数组(无符号!)size\u t
将是一种选择。