簡體   English   中英

數組分配導致分段錯誤

[英]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];
    }
}

上述程序中分段錯誤的唯一可能原因:

  1. 用於“n”變量的第一個輸入大於 1000000。

在評估表達式 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;
    //...

請注意,這些變量qlr未在您的程序中使用。

另一種方法是為 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM