2017-01-06 4 views
1

次のコードはサンプル入力で正常に実行されますが、13のテストケースでセグメント化エラーが発生します。Hackerrank円形アレイ回転セグメント化エラー

#include <math.h> 
#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 
#include <assert.h> 
#include <limits.h> 
#include <stdbool.h> 

int main(){ 
    int n; 
    int k; 
    int q; 
    int index[q]; 
    scanf("%d %d %d",&n,&k,&q); 
    int *a = (malloc(sizeof(int) * n)); 
    for(int a_i = 0; a_i < n; a_i++){ 
     scanf("%d",&a[a_i]); 
    } 
    for(int a0 = 0; a0 < q; a0++){ 
     int m; 
     scanf("%d",&m); 
     index[a0] = m; 
    } 
    for(int i=0; i<k; i++){ 
     int ap = a[n-2];  

     for(int p=1; p<n-1; p++){ 
      a[p] = a[p-1]; 
     } 
     a[0] = a[n-1]; 
     a[n-1] = ap;  


    } 
    for(int j=0; j<q;j++){ 
     printf("%d\n", a[index[j]]); 
    } 

    return 0; 
} 

セグメント違反がどこにあるかわかりません。 where I asked about declaring a as a pointer using malloc

malloc()を使って宣言すると、割り当てエラーをチェックしないためにセグメント化エラーが発生する可能性がありますが、配列として定義しても問題は解決されている可能性があります残った。

+2

フォールトフォールト(5つのハックスでなければならない)の入力を1つ購入し、 'gdb'を使用します。 –

+8

うーん...興味深い: 'int q; int index [q]; ' – KompjoeFriek

+0

@ kartikeykant18できません...そしてここでqは初期化されていません。 – Cherubim

答えて

3

qは初期化されていませんが、配列宣言の引数として使用されます。

qの値を読み取った後、インデックス配列を割り当てるには、mallocを使用する必要があります。

関連する問題