2012-05-05 16 views
-1

実行時エラーsigsegvが表示されていますが、このコードの問題を理解できません。 これは、初期部分文字列を最大の優先順位を持つ文字列の配列と照合するプログラムです。実行時エラーsigsegv

#include<stdio.h> 
#include<limits.h> 
int main() { 
    int T,i,N; 
    char si[T][1000]; 
    long vi[T]; 
scanf("%d",&T); 
for(i=0;i<T;++i) 
      scanf("%s%ld",&si[i],&vi[i]); 

scanf("%d",&N); 
while(N--) { 
      char str[1000]; 
      scanf("%s",str); 
      int j,maxPindex=-1; 
      long maxPriority=LONG_MIN; 
      int l=strlen(str); 
      for(j=0;j<T;++j) { 
        if(strlen(si[j])>=l && strncmp(str,si[j],l)==0 && vi[j]>maxPriority) { 
               maxPriority=vi[j]; 
               maxPindex=j; 
        }             
      } 
      //free(str); 
      if(maxPindex==-1) printf("NO\n"); 
      else printf("%s\n",si[maxPindex]); 
} 
return (0); 

} 
+3

「できるだけ早く回答を投稿してください」:OK。 –

+2

スペースバーを修正し、できるだけ早くコンパイラの警告をオンにしてください。次に、あなたがどれくらい大きなことを期待しているのか自分に尋ねます。 –

答えて

1

変数 "si"の作成を試みると既にクラッシュしています。変数 "T"のような関数内のC変数は、値としてランダムなガーベジで始まります。たとえば、918128238が含まれている可能性があります。次に、「si」を作成しようとすると、これは非常に大きな配列になり、適合しません。

"si"と "vi"を作成する前に "T"の値を読み取る必要があります。つまり、 "si"と "vi"の宣言の前にscanfを移動します。