Tema: Re: Segmentation fault
Autorius: Vilius Jakas
Data: 2010-11-25 16:59:42
On 11/25/2010 04:55 PM, Jornada Del Muerto wrote:
> O cia kokia C ? gal dosine kokia ir islendi per segmento dydi ar kazkas tokio...
>
>
> "Vilius Jakas"<vilius@anet.lt>  wrote in message news:iclt82$nju$1@trimpas.omnitel.net...
>> Sveiki. Band=iau spresti IT olimpiados uzdavinius ir su tam tikrais
>> testais gaunu arba blogą atsakymą arba segmentation fault
>>
>> Štai kodas
>>
>> #include<stdio.h>
>>
>> int main(){
>>
>>      int Pi[100],Ti[100], N, S,i,sum=0,max=0;
>>      FILE *in, *out;
>>      in=fopen("keliautojas-vyr.in","r");
>>      out=fopen("keliautojas-vyr.out","w");
>>
>>
>> //Nuskaitymas
>> fscanf(in,"%d %d",&N,&S);
>> for(i=0;i<N;i++)
>>      fscanf(in,"%d %d",&Pi[i],&Ti[i]);
>>   for(i=0;i<N;i++)
>>    printf("%d %d\n",Pi[i],Ti[i]);
>> //zaidziam
>> S=S-1; //nes masyve skaiciai pradedami nuliu
>>
>> for(i=0;i<N;i++){
>> sum=sum+(Pi[S]); //prideda pinigus
>> if(sum>max)max=sum;
>> Pi[S]=0; //panaikina laukelio reiksme
>> S=Ti[S]; //sekantis laukelis
>> }
>>
>> //fprintf(out,"%d\n",sum);
>>
>> printf("suma %d \n",sum);
>>   //for(i=0;i<N;i++)
>>   // printf("%d %d\n",Pi[i],Ti[i]);
>>
>> getchar();
>> getchar();
>>      return 0;
>> }
>>
>> O štai čia keliautojas-vyr.in su kuriuo gaunu seg fault
>>
>> 5 3
>> 2 5
>> 1 1
>> -7 5
>> -4 2
>> 2 4
>>
Taip, dosinė(iš terminalo leidžiu) Supratau klaidą
 >> for(i=0;i<N;i++){
 >> sum=sum+(Pi[S]); //prideda pinigus
 >> if(sum>max)max=sum;
 >> Pi[S]=0; //panaikina laukelio reiksme
 >> S=Ti[S]; //sekantis laukelis
o turėtu būti
 >> for(i=0;i<N;i++){
 >> sum=sum+(Pi[S-1]); //prideda pinigus
 >> if(sum>max)max=sum;
 >> Pi[S-1]=0; //panaikina laukelio reiksme
 >> S=Ti[S-1]; //sekantis laukelis

dėl tos pačios masyvo numeravimo savybės