[英]Array assignment causes segmentation fault
我正在嘗試創建一個程序,我可以在其中跟蹤所有先前元素的總和。 下面是我寫的代碼。 它因信號 11 崩潰,分段錯誤。
我試圖調試並找到原因。 事實證明它在輸入之前有效,但是當我嘗試將總和分配給總和數組時,它會引發錯誤。
#include<stdio.h>
int main()
{
long long int n,q,l,r,i,prev=0,temp;
long long int a[1000000], s[1000000];
scanf("%lld%lld",&n,&q);
for(i=0;i<n;i++)
{
scanf("%lld",&temp);
a[i]=temp;
printf("%lld",a[i]);
s[i]=a[i]+prev;
prev= s[i];
}
}
上述程序中分段錯誤的唯一可能原因:
在評估表達式 a[I] 時,您將在 s[I] = a[I] + prev 語句處得到錯誤異常.....
似乎這些具有自動存儲持續時間的 arrays 聲明需要很多 memory
long long int a[1000000], s[1000000];
在 function main 之前聲明 arrays。
long long int a[1000000], s[1000000];
int main()
{
long long int n,q,l,r,i,prev=0,temp;
//...
請注意,這些變量q
、 l
和r
未在您的程序中使用。
另一種方法是為 arrays 動態分配 memory
#include<stdio.h>
#include <stdlib.h>
int main()
{
long long int n,q,l,r,i,prev=0,temp;
long long int *a, *s;
scanf("%lld%lld",&n,&q);
a = malloc(sizeof(int)*n);
s = malloc(sizeof(int)*n);
for(i=0;i<n;i++)
{
scanf("%lld",&temp);
a[i]=temp;
printf("%lld",a[i]);
s[i]=a[i]+prev;
prev= s[i];
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.