-1

我收到运行时错误 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);

}
4

1 回答 1

1

它在尝试创建变量“si”时已经崩溃。函数内部的 AC 变量,例如变量“T”,以随机垃圾作为其值开始。例如,它可能包含 918128238。然后,当尝试创建“si”时,这将是一个非常大的数组,它不适合。

在创建“si”和“vi”之前,您需要读取“T”的值。也就是说,将您的 scanf 移到“si”和“vi”声明之前。

于 2012-05-05T06:00:43.100 回答