Tema: Re: Segmentation fault (html)
Autorius: Jornada Del Muerto
Data: 2010-11-25 17:20:06
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META content="text/html; charset=utf-8" http-equiv=Content-Type>
<META name=GENERATOR content="MSHTML 8.00.6001.18975">
<STYLE></STYLE>
</HEAD>
<BODY>
<DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
<DIV><FONT size=2 face=Arial>"Vilius Jakas" &lt;</FONT><A 
href="mailto:vilius@anet.lt"><FONT size=2 
face=Arial>vilius@anet.lt</FONT></A><FONT size=2 face=Arial>&gt; wrote in 
message </FONT><A href="news:icltku$o8r$1@trimpas.omnitel.net"><FONT size=2 
face=Arial>news:icltku$o8r$1@trimpas.omnitel.net</FONT></A><FONT size=2 
face=Arial>...</FONT></DIV>
<DIV><FONT size=1 face=Arial><EM>&gt; On 11/25/2010 04:55 PM, Jornada Del Muerto 
wrote:<BR>&gt;&gt; O cia kokia C ? gal dosine kokia ir islendi per segmento dydi 
ar kazkas tokio...<BR>&gt;&gt;<BR>&gt;&gt;<BR>&gt;&gt; "Vilius 
Jakas"&lt;</EM></FONT><A href="mailto:vilius@anet.lt"><FONT size=1 
face=Arial><EM>vilius@anet.lt</EM></FONT></A><FONT size=1 
face=Arial><EM>&gt;&nbsp; wrote in message </EM></FONT><A 
href="news:iclt82$nju$1@trimpas.omnitel.net"><FONT size=1 
face=Arial><EM>news:iclt82$nju$1@trimpas.omnitel.net</EM></FONT></A><FONT size=1 
face=Arial><EM>...<BR>&gt;&gt;&gt; Sveiki. Band=iau spresti IT olimpiados 
uzdavinius ir su tam tikrais<BR>&gt;&gt;&gt; testais gaunu arba blogą atsakymą 
arba segmentation fault<BR>&gt;&gt;&gt;<BR>&gt;&gt;&gt; Štai 
kodas<BR>&gt;&gt;&gt;<BR>&gt;&gt;&gt; 
#include&lt;stdio.h&gt;<BR>&gt;&gt;&gt;<BR>&gt;&gt;&gt; int 
main(){<BR>&gt;&gt;&gt;<BR>&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int 
Pi[100],Ti[100], N, 
S,i,sum=0,max=0;<BR>&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FILE *in, 
*out;<BR>&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
in=fopen("keliautojas-vyr.in","r");<BR>&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
out=fopen("keliautojas-vyr.out","w");<BR>&gt;&gt;&gt;<BR>&gt;&gt;&gt;<BR>&gt;&gt;&gt; 
//Nuskaitymas<BR>&gt;&gt;&gt; fscanf(in,"%d %d",&amp;N,&amp;S);<BR>&gt;&gt;&gt; 
for(i=0;i&lt;N;i++)<BR>&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fscanf(in,"%d 
%d",&amp;Pi[i],&amp;Ti[i]);<BR>&gt;&gt;&gt;&nbsp;&nbsp; 
for(i=0;i&lt;N;i++)<BR>&gt;&gt;&gt;&nbsp;&nbsp;&nbsp; printf("%d 
%d\n",Pi[i],Ti[i]);<BR>&gt;&gt;&gt; //zaidziam<BR>&gt;&gt;&gt; S=S-1; //nes 
masyve skaiciai pradedami nuliu<BR>&gt;&gt;&gt;<BR>&gt;&gt;&gt; 
for(i=0;i&lt;N;i++){<BR>&gt;&gt;&gt; sum=sum+(Pi[S]); //prideda 
pinigus<BR>&gt;&gt;&gt; if(sum&gt;max)max=sum;<BR>&gt;&gt;&gt; Pi[S]=0; 
//panaikina laukelio reiksme<BR>&gt;&gt;&gt; S=Ti[S]; //sekantis 
laukelis<BR>&gt;&gt;&gt; }<BR>&gt;&gt;&gt;<BR>&gt;&gt;&gt; 
//fprintf(out,"%d\n",sum);<BR>&gt;&gt;&gt;<BR>&gt;&gt;&gt; printf("suma %d 
\n",sum);<BR>&gt;&gt;&gt;&nbsp;&nbsp; 
//for(i=0;i&lt;N;i++)<BR>&gt;&gt;&gt;&nbsp;&nbsp; // printf("%d 
%d\n",Pi[i],Ti[i]);<BR>&gt;&gt;&gt;<BR>&gt;&gt;&gt; getchar();<BR>&gt;&gt;&gt; 
getchar();<BR>&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 
0;<BR>&gt;&gt;&gt; }<BR>&gt;&gt;&gt;<BR>&gt;&gt;&gt; O štai čia 
keliautojas-vyr.in su kuriuo gaunu seg fault<BR>&gt;&gt;&gt;<BR>&gt;&gt;&gt; 5 
3<BR>&gt;&gt;&gt; 2 5<BR>&gt;&gt;&gt; 1 1<BR>&gt;&gt;&gt; -7 5<BR>&gt;&gt;&gt; 
-4 2<BR>&gt;&gt;&gt; 2 4<BR>&gt;&gt;&gt;<BR>&gt; Taip, dosinė(iš terminalo 
leidžiu) Supratau klaidą<BR>&gt;&nbsp;&gt;&gt; 
for(i=0;i&lt;N;i++){<BR>&gt;&nbsp;&gt;&gt; sum=sum+(Pi[S]); //prideda 
pinigus<BR>&gt;&nbsp;&gt;&gt; if(sum&gt;max)max=sum;<BR>&gt;&nbsp;&gt;&gt; 
Pi[S]=0; //panaikina laukelio reiksme<BR>&gt;&nbsp;&gt;&gt; S=Ti[S]; //sekantis 
laukelis<BR>&gt; o turėtu būti<BR>&gt;&nbsp;&gt;&gt; 
for(i=0;i&lt;N;i++){<BR>&gt;&nbsp;&gt;&gt; sum=sum+(Pi[S-1]); //prideda 
pinigus<BR>&gt;&nbsp;&gt;&gt; if(sum&gt;max)max=sum;<BR>&gt;&nbsp;&gt;&gt; 
Pi[S-1]=0; //panaikina laukelio reiksme<BR>&gt;&nbsp;&gt;&gt; S=Ti[S-1]; 
//sekantis laukelis<BR>&gt; <BR>&gt; dėl tos pačios masyvo numeravimo 
savybės</EM></FONT></DIV>
<DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
<DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
<DIV><FONT size=2 face=Arial>Siaip del kodo stiliaus tureciau kelis 
komentarus:</FONT></DIV>
<DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
<DIV><FONT size=2 face=Arial><STRONG>1. Hardcodinimas teksto i 
koda:</STRONG></FONT></DIV>
<DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
<DIV><FONT size=2 
face=Arial>in=fopen("keliautojas-vyr.in","r");<BR>out=fopen("keliautojas-vyr.out","w");</FONT></DIV>
<DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
<DIV><FONT size=2 face=Arial>Geriau yra kurtis konstantas, kurios butu vienoje 
vietoje, o dar geriau 1 faile, o ne rasyti hardcodintas reiksmes i 
koda:</FONT></DIV>
<DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
<DIV><FONT size=2 face=Arial>sukuri koki: defauts.c</FONT></DIV>
<DIV><FONT size=2 face=Arial>ir surasai:</FONT></DIV>
<DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
<DIV><FONT size=2 face=Arial>/**</FONT></DIV>
<DIV><FONT size=2 face=Arial>&nbsp;* Failai</FONT></DIV>
<DIV><FONT size=2 face=Arial>&nbsp;*/</FONT></DIV>
<DIV><FONT size=2 face=Arial>#define 
MY_IN_FILE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"keliautojas-vyr.in"&nbsp;&nbsp;&nbsp; 
// Ieinantis failas</FONT></DIV>
<DIV><FONT size=2 face=Arial>#define MY_OUT_FILE&nbsp; 
"keliautojas-vyr.out"&nbsp;&nbsp;&nbsp; // Iseinantis failas</FONT></DIV>
<DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
<DIV><FONT size=2 face=Arial>/**</FONT></DIV>
<DIV><FONT size=2 face=Arial>&nbsp;* Kazkas kita</FONT></DIV>
<DIV><FONT size=2 face=Arial>&nbsp;*/<BR>#define &nbsp;&nbsp;&nbsp; 
MY_KAZKOKI_KITI_NUSTATYMAI 10</FONT></DIV>
<DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
<DIV><FONT size=2 face=Arial>&nbsp;&nbsp;&nbsp; Ir taip viska graziai su 
komentarais, tada ka turesi tai kad kode nereikes ieskoti kur ka pakeisti 
panorejus nes viska turesi 1 vietoje ir siaip programuojant blasko demesi 
kazkoks pasalinis tekstas kuris ner programos dalis o duomenys.</FONT></DIV>
<DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
<DIV><FONT size=2 face=Arial><STRONG>2. Rasineti salygas ir ciklus be lauztiniu 
skliaustu gal ir kruta, bet daro prasciau skaitoma koda</STRONG>, 
pvz.:</FONT></DIV>
<DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
<DIV><FONT color=#ff0000 size=2 face=Arial>&gt;&gt;&gt; 
//Nuskaitymas<BR>&gt;&gt;&gt; fscanf(in,"%d %d",&amp;N,&amp;S);<BR>&gt;&gt;&gt; 
for(i=0;i&lt;N;i++)<BR>&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fscanf(in,"%d 
%d",&amp;Pi[i],&amp;Ti[i]);<BR>&gt;&gt;&gt;&nbsp;&nbsp; 
for(i=0;i&lt;N;i++)<BR>&gt;&gt;&gt;&nbsp;&nbsp;&nbsp; printf("%d 
%d\n",Pi[i],Ti[i]);<BR>&gt;&gt;&gt; //zaidziam<BR>&gt;&gt;&gt; S=S-1; //nes 
masyve skaiciai pradedami nuliu<BR></FONT></DIV>
<DIV><FONT size=2 face=Arial>Cia jau tenka siek tiek laiko pamastyt kas 
parasyta, 1 dalykas viena funkcija sulipdyta su kita, ta prasme tik 1 
komentaras, kas bus aisku ka tai daro pirma menesi bet ne po metu laiko, 2 
norint plesti funkcionaluma vistiek teks dadelioti skliaustus, tai daug graziau 
ir suprantamiau atrodytu taip:</FONT></DIV>
<DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
<DIV><FONT color=#008000 size=2 face=Arial>// Darbas su nuskaitomu 
failu</FONT></DIV>
<DIV><FONT color=#008000 size=2 face=Arial>// Skaitoma informacija</FONT></DIV>
<DIV><FONT size=2 face=Arial>fscanf(in,"%d %d",&amp;N,&amp;S);</FONT></DIV>
<DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
<DIV><FONT size=2 face=Arial><FONT color=#008000>// Atliekamas toks anoks 
ciklas<BR></FONT>for(i=0;i&lt;N;i++) {<BR>&nbsp;&nbsp;&nbsp; fscanf(in,"%d 
%d",&amp;Pi[i],&amp;Ti[i]);</FONT></DIV>
<DIV><FONT size=2 face=Arial>}</FONT></DIV>
<DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
<DIV><FONT size=2 face=Arial><FONT color=#008000>// Atliekamas ciklas b - daro 
ta ana<BR></FONT>for(i=0;i&lt;N;i++) {<BR>&nbsp;&nbsp;&nbsp; printf("%d 
%d\n",Pi[i],Ti[i]);</FONT></DIV>
<DIV><FONT size=2 face=Arial>}</FONT></DIV>
<DIV><BR><FONT size=2 face=Arial><FONT color=#008000>// 
zaidziam<BR></FONT>S=S-1; //nes masyve skaiciai pradedami nuliu<BR></FONT></DIV>
<DIV><FONT size=2 face=Arial>&nbsp;&nbsp;&nbsp; Nes kai viska sumala zmones i 
kuva poto ir kyla klausimai kodel kazkas neveikia, nes paciam baisu ziureti i 
savo kurini ir sunku jame ka nors suprasti, gal cia ir kodas olimpiadai bet kaip 
iprasi rasyti taip rasysi visada, del to geriau pradzioj pakenteti pasistengti o 
su laiku taip iprasi ir negalesi kitaip, tada kolegos uz nugaros taves nekeiks 
kad nenori tavo kodo taisinet nes jame velnias galva nusisuktu ;)</FONT></DIV>
<DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
<DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
<DIV><FONT size=2 face=Arial>JDM.</FONT></DIV></BODY></HTML>