[英]Unsigned long long int as an array index in C on a very big array
[英]What datatype can be used for array index 0 to 4000000 when i used int or unsigned long long my program crashes
用於查找斐波那契數列的偶數
#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;
}
我編譯時此代碼崩潰。但是對於a = 10而言,此代碼工作正常。 我嘗試將類型更改為unsigned long long,並將格式說明符更改為%llu,即使我將主數據類型更改為unsigned long long,代碼也仍然崩潰,這是行不通的,我認為數字4000000對於int類型來說太大了,但是當我搜索時從他網站上的其他用戶那里獲得了此代碼
// Simple Program to print Fibonacci series in Console
#include <stdio.h>
int main() {
int x=1,y=2,sum=0,limit=0,i=0,temp=0;
printf("Enter Limit:");
scanf("%d",&limit);
if(limit==1)
printf("%d",x);
else if(limit>1) {
printf("%d %d",x,y);
if (limit>2) {
while (i<limit-2) {
temp=y;
sum=x+y;
x=temp;
y=sum;
printf(" %d",sum);
i++;
}
}
}
printf("\n");
return 0;
}
這段代碼很好用,我是一個初學者,而且是一個自學成才的人,我不知道我的代碼有什么問題,因為我使用了array.Please幫助糾正這一點。 謝謝。
大多數實現對堆棧幀的大小都有相當小的限制。 如果需要大型數組,請將其設為靜態或動態分配。
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 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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.