* Curious segmentation fault - please help
@ 2006-05-13 14:28 Shriramana Sharma
2006-05-13 15:09 ` Steve Graegert
0 siblings, 1 reply; 6+ messages in thread
From: Shriramana Sharma @ 2006-05-13 14:28 UTC (permalink / raw)
To: Linux C Programming List
[-- Attachment #1.1: Type: text/plain, Size: 653 bytes --]
Attached: valgrind output; used electric fence too
Attached: original source code (licence: Artistic Licence v2)
I am getting a segmentation fault. I have compiled using electric fence, and
used valgrind to debug. (Not got used to gdb yet.)
For some reason, while I have initialized the array grahanaama[] (line 64 of
monthpan.c), grahanaama[0] gives an error at line 593 [added for debugging].
Similarly initialized array tithinaama does not give an error for accessing
tithinaama[0].
Please help.
--
Tux #395953 resides at http://samvit.org
playing with KDE 3.51 on SUSE Linux 10.1
$ date [] CCE +2006-05-13 W19-6 UTC+0530
[-- Attachment #1.2: monthpan.c --]
[-- Type: text/x-csrc, Size: 21606 bytes --]
/* ---------------------- shuddha drik panchaanga ---------------------- */
/* version 1.43 */
/* ------------------- header includes ------------------- */
#include "swephexp.h"
#include "time.h"
/* ------------------- function declarations ------------------- */
/* display instructions to user */
void dispinstructsfordate(void);
/* convenience functions - general */
double mod360(double inbut);
/* convenience functions - output */
void writetithinaama(int tithi2);
void writekarananaama(int karana2);
void depwarn(const char *s);
/* validate and input functions */
void vinputdate(void);
void safeinput(void);
/* output formatting functions */
char *ppt_hm(double t);
char *ppd2(int mon, int day);
/* jyotisha functions */
void calcpananglesfor(double tjd2);
void searchforpan(int mode, int itemnum, double startjd, char searchspace);
double ayanaamshafor(double tjd2);
/* main output functions */
void listsplpanchaanga(double startjd2, double endjd2);
/* ------------------- variable declarations ------------------- */
char ppoutput[12];
char cvoutput[30];
char safeinputbuffer[30];
char serr[AS_MAXCH];
char chaandramaasa[80];
int jday, jmon, jyear, jhour, jmin, jsec;
int planet;
int tithi, vaasara, nakshatra, yoga, karana;
int rtu, saayanamaasa, nirayanamaasa;
int tzhour, tzmin;
int repeatinput, iteration;
int userinputjulianday, borderday;
int depwarned;
int sunatamaa0, sunatamaa1, sunatamaa2, chaandramaasatype;
int32 iflag, iflgret;
time_t nowval;
double jut, tjd, te, x2[6];
double startjd, endjd;
double xSpica[6], ayanaamsha;
double grahadata[9][2], saayanasuurya;
double tithiangle, nakshatraangle, yogaangle;
double stithiangle, snakshatraangle, syogaangle; // to be used during search
double sayanaamsha, ssunlong, smoonlong; // to be used during search
double tzoffset;
double low, high, border, borderoftithi; // borderoftithi used when karana is second half
double amaalow, amaahigh, amaa0, amaa1, amaa2;
struct tm now, nowut, ppbuffer;
FILE *fp;
/* ------------------- constant declarations ------------------- */
enum searchpanchoices { S_TITHI, S_NAKSHATRA, S_YOGA, S_KARANA };
double chennai[3] = {80.3, 13.1, 0.0};
char spicanaama[] = "Spica";
char *grahanaama[] = {"Bhaanu", "Soma", "Mangala", "Budha", "Guru", "Shukra", "Shani"};
char *tithinaama[] = {
"Pratham", "Dvitii", "Tritii",
"Chatur", "Pancha", "Shash",
"Sapta", "Ashta", "Nava",
"Dasha", "Ekaada", "Dvaada",
"Trayoda", "Chaturda" };
// puurnimaa and amaavaasyaa will be handled separately
char *nakshatranaama[] = {
"Ashvinii", "Bharanii", "Kritti",
"Rohinii", "Mriga", "Aardraa",
"Punar", "Pushya", "Aashre",
"Maghaa", "P Phal", "U Phal",
"Hasta", "Chitraa", "Svaatii",
"Vishaa", "Anuraa", "Jyesh",
"Muula", "P Ashaa", "U Ashaa",
"Shravana", "Shravish", "Shata",
"P Prosh", "U Prosh", "Revatii" };
char *yoganaama[] = {
"Vishkam", "Priiti", "Aayush",
"Saubhaa", "Shobhana", "Atiganda",
"Sukarman", "Dhriti", "Shuula",
"Ganda", "Vriddhi", "Dhruva",
"Vyaaghaa", "Harshana", "Vajra",
"Siddhi", "Vyatii", "Varigha",
"Parigha", "Shiva", "Siddha",
"Saadhya", "Shubha", "Shubhra",
"Braahma", "Maahen", "Vaidhri" };
char *karananaama[] = {
"Bava", "Baalava", "Kaulava", "Taitila", "Garajaa", "Vanijaa", "Bhadraa" };
// sthira karana-s will be handled separately
double arcmin800 = 360.0 / 27.0;
/* ------------------- main function ------------------- */
int main(int argc, char *argv[])
{
swe_set_ephe_path(".");
iflag = SEFLG_SPEED;
userinputjulianday = 0;
depwarned = 0;
tzoffset = 0;
printf("\n");
/* testing dependency files */
if ((fp = fopen("fixstars.cat", "r")) == NULL) depwarn("fixstars.cat"); else fclose(fp);
if ((fp = fopen( "sepl_18.se1", "r")) == NULL) depwarn( "sepl_18.se1"); else fclose(fp);
if ((fp = fopen( "semo_18.se1", "r")) == NULL) depwarn( "semo_18.se1"); else fclose(fp);
/*
ayanaamshafor(2451545.0);
if (iflgret < 0) depwarn("fixstars.cat");
iflgret = swe_calc(2451545.0, 0, iflag, x2, serr); // sun
if ((iflgret < 0) || (iflgret != iflag)) depwarn("sepl_18.se1");
iflgret = swe_calc(2451545.0, 1, iflag, x2, serr); // moon
if ((iflgret < 0) || (iflgret != iflag)) depwarn("semo_18.se1");
*/
if (depwarned) printf("\n");
/* processing arguments */
argc--;
if (argc == 0) // no commandline arguments
{
printf("Please provide the start and end Gregorian dates.\n");
dispinstructsfordate();
tzoffset = 5.5 / 24.0;
printf("Please enter the start date.\n");
vinputdate();
startjd = swe_julday(jyear,jmon,jday,jut,SE_GREG_CAL) - tzoffset;
printf("Please enter the end date.\n");
do
{
repeatinput = FALSE;
vinputdate();
endjd = swe_julday(jyear,jmon,jday,jut,SE_GREG_CAL) - tzoffset;
if ((int) endjd <= (int) startjd) repeatinput = TRUE;
if (repeatinput) printf("Please enter an end date later than the start date.\n");
}
while (repeatinput);
listsplpanchaanga(startjd, endjd);
}
else // too many parameters
{
printf ("Too many parameters.\n");
}
printf("\nWritten special panchaanga for given date range for Chennai to monthpan.txt\n\n");
return 1;
}
/* display instructions to user */
void dispinstructsfordate(void)
{
printf("Years must be in the range 1800 to 2399 CCE (\"AD\"). Two-digit years are not accepted.\n");
printf("The timezone must be specified in terms of the UTC offset, positive east of Greenwich.\n\n");
}
/* convenience functions - general */
double mod360(double inbut)
{
if (inbut >= 360.0) return (inbut - 360.0);
if (inbut < 0.0) return (inbut + 360.0);
return inbut;
}
/* convenience functions - output */
void writetithinaama(int tithi2)
{
tithi2 %= 30;
if (tithi2 == 14) fprintf(fp, " Puurni ");
else if (tithi2 == 29) fprintf(fp, " Amaa ");
else fprintf(fp, "%8s ", tithinaama[(tithi2 > 14) ? (tithi2 - 15) : tithi2]);
}
void writekarananaama(int karana2)
{
karana2 %= 60;
switch(karana2)
{
case 0: fprintf(fp, " Kimstu "); break;
case 57: fprintf(fp, "Shakuni "); break;
case 58: fprintf(fp, "Chatush "); break;
case 59: fprintf(fp, "Naagava "); break;
default:
fprintf(fp, "%7s ", karananaama[(karana2 - 1) % 7]);
break;
}
}
void depwarn(const char *s)
{
printf("WARNING: %12s not found. Internal medium-accuracy formulae will be used.\n", s);
// to change to "or corrupted" when the corruption checking is debugged
depwarned = 1;
}
/* validate and input functions */
void vinputdate(void)
{
do
{
repeatinput = FALSE;
printf("Date as YYYY-MM-DD : ");
safeinput();
if (sscanf(safeinputbuffer, "%d-%d-%d", &jyear, &jmon, &jday) < 1) repeatinput = TRUE;
if (swe_date_conversion(jyear, jmon, jday, 0.0, 'g', &tjd) == ERR) repeatinput = TRUE;
if (jyear < 1800 || jyear > 2399) repeatinput = TRUE;
if (repeatinput) printf ("Please enter a valid date.\n");
}
while (repeatinput);
}
void safeinput(void)
{
fgets(safeinputbuffer, 30, stdin);
}
/* formatting functions */
char *ppt_hm(double t) // pretty print time -- no seconds
{
ppbuffer.tm_mday = 1; // since it's the only member without zero value
ppbuffer.tm_hour = (int) t;
t -= ppbuffer.tm_hour;
t *= 60.0;
ppbuffer.tm_min = (int) t;
strftime (ppoutput, 6, "%H:%M", &ppbuffer);
return ppoutput;
}
char *ppd2(int mon, int day) // pretty print date
{
ppbuffer.tm_mon = mon - 1;
ppbuffer.tm_mday = day;
strftime (ppoutput, 11, "%b-%d", &ppbuffer);
return ppoutput;
}
/* jyotisha functions */
void calcpananglesfor(double tjd2)
{
/* calculate ephemeris time in julian days */
te = tjd2 + swe_deltat(tjd2);
/* calculate ayanaamsha */
sayanaamsha = ayanaamshafor(te);
/* calculate sun and moon */
swe_calc(te, 0, iflag, x2, serr); // sun
ssunlong = mod360(x2[0] - sayanaamsha);
swe_calc(te, 1, iflag, x2, serr); // moon
smoonlong = mod360(x2[0] - sayanaamsha);
/* calculate the tithi, nakshatra and yoga angles for search */
stithiangle = mod360(smoonlong - ssunlong); // lunar minus solar longitude
snakshatraangle = smoonlong; // lunar longitude
syogaangle = mod360(smoonlong + ssunlong); // lunar plus solar longitude
}
void searchforpan(int mode, int itemnum, double startjd, char searchspace)
{
low = startjd;
switch (searchspace)
{
case 'h': high = low + 0.5; break;
case 'f': high = low + 1.0; break;
case 'x': high = low + 1.5; break;
}
for (iteration = 1; iteration < 26; iteration++)
{
border = (low + high) / 2.0;
calcpananglesfor(border);
switch (mode)
{
case S_TITHI:
if (itemnum > 29) itemnum -= 30; // needed because we search for tithi + 2 etc
if (itemnum == 0)
{
if (stithiangle > 330.0) low = border;
if (stithiangle < 30.0) high = border;
}
else
{
if (stithiangle < (itemnum * 12.0)) low = border;
else high = border;
}
break;
case S_NAKSHATRA:
if (itemnum > 26) itemnum -= 27; // needed because we search for nakshatra + 2 etc
if (itemnum == 0)
{
if (snakshatraangle > 330.0) low = border;
if (snakshatraangle < 30.0) high = border;
}
else
{
if (snakshatraangle < (itemnum * arcmin800)) low = border;
else high = border;
}
break;
case S_YOGA:
if (itemnum > 26) itemnum -= 27; // needed because we search for yoga + 2 etc
if (itemnum == 0)
{
if (syogaangle > 330.0) low = border;
if (syogaangle < 30.0) high = border;
}
else
{
if (syogaangle < (itemnum * arcmin800)) low = border;
else high = border;
}
break;
case S_KARANA:
if (itemnum > 59) itemnum -= 60; // needed because we search for karana + 2 etc
if (itemnum == 0)
{
if (stithiangle > 330.0) low = border;
if (stithiangle < 30.0) high = border;
}
else
{
if (stithiangle < (itemnum * 6.0)) low = border;
else high = border;
}
break;
}
}
}
double ayanaamshafor(double te2)
{
iflgret = swe_fixstar(spicanaama, te2, iflag, xSpica, serr);
if (iflgret >= 0) return (xSpica[0] - 180.0); // < 0 -> file not found or corrupted
/* the following section is evaluated only if the fixstars.cat file is not found or is corrupted */
double t;
double ra_h, ra_m, ra_s, ra;
double de_d, de_m, de_s, de;
double ra_pm, de_pm;
double parallax, r, radv;
double sinra, cosra;
double sinde, cosde;
double x, y, z;
double delx, dely, delz;
double zeta, zee, theta;
double cosraz;
double sinth, costh;
double A, B, C;
double ep;
double lambda, ayana;
double obli_nut[6];
t = te2 - 2451545.0; // days since J2000.0
t /= 365.25; // convert to years
/* spica value initialization */
/* 1. x-y position */
ra_h = 13.0;
ra_m = 25.0;
ra_s = 11.5793;
ra = (ra_h + ra_m / 60.0 + ra_s / 3600.0) * 15.0; // convert to degrees
ra *= DEGTORAD; // convert to radians;
de_d = -11.0;
de_m = -9.0;
de_s = -40.759;
de = de_d + de_m / 60.0 + de_s / 3600.0; // convert to degrees
de *= DEGTORAD; // convert to radians
/* 2. x-y motion */
ra_pm = -42.50; // mas/yr
de_pm = -31.73; // mas/yr
ra_pm /= (3600.0 * 1000.0); // convert to degrees per year;
de_pm /= (3600.0 * 1000.0);
ra_pm *= DEGTORAD; // convert to radians per year
de_pm *= DEGTORAD;
/* 3. z position and motion */
parallax = 12.44; // milliarcseconds
parallax /= 1000.0; // convert to arcseconds
r = 1 / parallax; // distance in parsecs
radv = 1.0; // km/s
radv /= 977792.0; // convert to parsecs per year
#if 0
/* simple proper motion */
ra += ra_pm * t;
de += de_pm * t;
#endif
/* rigorous proper motion */
sinra = sin(ra); // convenience
cosra = cos(ra);
sinde = sin(de);
cosde = cos(de);
x = r * cosde * cosra;
y = r * cosde * sinra;
z = r * sinde;
delx = (x / r) * radv - z * de_pm * cosra - y * ra_pm;
dely = (y / r) * radv - z * de_pm * sinra + x * ra_pm;
delz = (z / r) * radv + r * de_pm * cosde;
x += t * delx;
y += t * dely;
z += t * delz;
ra = atan2(y, x);
de = atan2(z, sqrt(x * x + y * y));
/* precession */
t /= 100.0; // convert to centuries
zeta = t * (2306.2181 + t * (0.30188 + t * 0.018998));
zee = t * (2306.2181 + t * (1.09468 + t * 0.018203));
theta = t * (2004.3109 + t * (0.42665 + t * 0.041833));
zeta /= 3600.0; // to degrees
zee /= 3600.0;
theta /= 3600.0;
zeta *= DEGTORAD; // to radians
zee *= DEGTORAD;
theta *= DEGTORAD;
cosraz = cos(ra + zeta);
sinth = sin(theta);
costh = cos(theta);
sinde = sin(de); // recalculation for changed de value
cosde = cos(de);
A = cosde * sin(ra + zeta);
B = cosde * cosraz * costh - sinth * sinde;
C = cosde * cosraz * sinth + costh * sinde;
ra = atan2(A, B) + zee;
de = asin(C);
/* find obliquity and nutation in longitude */
swe_calc(te2, SE_ECL_NUT, 0, obli_nut, serr);
ep = obli_nut[0];
// ep = 23.0 + 26.0 / 60.0 + 21.448 / 3600.0; // J2000
ep *= DEGTORAD;
/* find ecliptic longitude */
lambda = atan2(sin(ra) * cos(ep) + tan(de) * sin(ep), cos(ra));
lambda /= DEGTORAD;
lambda += obli_nut[2];
/* find and return ayanaamsha */
ayana = lambda - 180.0;
if (ayana < 0.0) ayana += 360.0;
return ayana;
}
/* main output function */
void listsplpanchaanga(double startjd2, double endjd2)
{
fp = fopen("monthpan.txt", "w");
int secondtithi, secondnakshatra, secondyoga, thirdkarana;
char bsecondtithi[10], bsecondnakshatra[10], bsecondyoga[10], bthirdkarana[10];
int extraexists;
int endtithi, endnakshatra, endyoga, endkarana;
int mendtithi, mendnakshatra, mendyoga, mendkarana;
double prev_sunset, this_sunrise, this_sunset, this_braahma, this_noon;
/* mend are modified end values use to prevent discontinuity at 0;
if (start)tithi == 29 and endtithi == 0, endtithi would not be identified as (start)tithi + 1
similarly for other cases
we cannot manipulate the end___ variables themselves since we need them to assign their values to
the start___ variables for the next day */
calcpananglesfor(startjd2);
tithi = stithiangle / 12.0; // prathamaa == 0
nakshatra = snakshatraangle / arcmin800; // ashvinii == 0
yoga = syogaangle / arcmin800; // vishkambha == 0
karana = stithiangle / 6.0; // kimstughna == 0
swe_rise_trans(startjd2 - 1, SE_SUN, NULL, SEFLG_SWIEPH,
SE_CALC_SET + SE_BIT_DISC_CENTER + SE_BIT_NO_REFRACTION,
chennai, 0, 25, &prev_sunset, serr);
//fprintf(fp, "debug: first prev_sunset %f \n", prev_sunset);
for (tjd = startjd2; tjd <= endjd2; tjd++)
{
extraexists = 0;
secondtithi = secondnakshatra = secondyoga = thirdkarana = 300; // an illegal value for all these
swe_revjul (tjd + tzoffset, SE_GREG_CAL, &jyear, &jmon, &jday, &jut);
fprintf(fp, "%6s | ", ppd2(jmon, jday));
swe_rise_trans(tjd, SE_SUN, NULL, SEFLG_SWIEPH,
SE_CALC_RISE + SE_BIT_DISC_CENTER + SE_BIT_NO_REFRACTION,
chennai, 0, 25, &this_sunrise, serr);
swe_rise_trans(tjd, SE_SUN, NULL, SEFLG_SWIEPH,
SE_CALC_SET + SE_BIT_DISC_CENTER + SE_BIT_NO_REFRACTION,
chennai, 0, 25, &this_sunset, serr);
this_braahma = this_sunrise - (this_sunrise - prev_sunset) / 5;
this_noon = (this_sunrise + this_sunset) / 2;
fprintf(fp, "%5s ", ppt_hm((this_braahma - tjd) * 24.0));
fprintf(fp, "%5s ", ppt_hm((this_sunrise - tjd) * 24.0));
fprintf(fp, "%5s ", ppt_hm((this_noon - tjd) * 24.0));
fprintf(fp, "%5s | ", ppt_hm((this_sunset - tjd) * 24.0));
calcpananglesfor(tjd + 1);
vaasara = fmod(tjd + tzoffset + 1.5, 7);
mendtithi = endtithi = stithiangle / 12.0;
mendnakshatra = endnakshatra = snakshatraangle / arcmin800;
mendyoga = endyoga = syogaangle / arcmin800;
mendkarana = endkarana = stithiangle / 6.0;
if (tithi != 0 && endtithi == 0) mendtithi += 30;
if (tithi == 29 && endtithi == 1) mendtithi += 30;
if (nakshatra != 0 && endnakshatra == 0) mendnakshatra += 27;
if (nakshatra == 26 && endnakshatra == 1) mendnakshatra += 27;
if (yoga != 0 && endyoga == 0) mendyoga += 27;
if (yoga == 26 && endyoga == 1) mendyoga += 27;
if (karana != 0 && endkarana == 0) mendkarana += 60;
if (karana != 0 && endkarana == 1) mendkarana += 60;
if (karana == 59 && endkarana == 2) mendkarana += 60;
/*
karana can go from
59 to 0, 58 to 0, 57 to 0
59 to 1, 58 to 1
59 to 2
it is safe to test for karana != 0 as a shortcut to (karana == 58 || karana == 59)
since karana == 1 && endkarana == 1 is *never* possible
otoh tithi == 1 && endtithi == 1 is possible,
so tithi != 0 would test false positive for tithi == 1
whereas it should evaluate only for tithi == 29
so we use safely tithi == 29
besides, since only one non-zero tithi value is possible for endtithi == 1,
a shortcut is not required
and regarding the mend___ += statements,
i opted for += instead of direct assignment for the logic to be clear
and remember that the mend___ values are assigned simultaneously with the end___ values,
else += would not work as expected to produce 30 for 0 or 31 for 1 etc
*/
if ((mendtithi == tithi + 2) || (mendnakshatra == nakshatra + 2) || (mendyoga == yoga + 2) ||
(mendkarana == karana + 3)) extraexists = 1;
if (tithi < 15) fprintf(fp, "Sh "); else fprintf(fp, "Kr ");
writetithinaama(tithi);
if (mendtithi == tithi + 2)
{
searchforpan(S_TITHI, tithi + 2, tjd, 'f'); // search for *start* of tithi + 2
secondtithi = tithi + 1; // we need to print name of tithi + 1
strcpy(bsecondtithi, ppt_hm((border - tjd) * 24.0));
}
if (mendtithi > tithi) // tests for tithi + 1 and tithi + 2
{
searchforpan(S_TITHI, tithi + 1, tjd, 'f');
fprintf(fp, "%5s | ", ppt_hm((border - tjd) * 24.0));
}
if (mendtithi == tithi) fprintf(fp, " / | ");
printf("debug: vaasara = %d, graha = %7s\n", vaasara, grahanaama[vaasara]);
fprintf(fp, "%7s | ", grahanaama[vaasara]);
fprintf(fp, "%8s ", nakshatranaama[nakshatra]);
if (mendnakshatra == nakshatra + 2)
{
searchforpan(S_NAKSHATRA, nakshatra + 2, tjd, 'f'); // search for *start* of nakshatra + 2
secondnakshatra = nakshatra + 1; // we need to print name of nakshatra + 1
strcpy(bsecondnakshatra, ppt_hm((border - tjd) * 24.0));
}
if (mendnakshatra > nakshatra) // tests for nakshatra + 1 and nakshatra + 2
{
searchforpan(S_NAKSHATRA, nakshatra + 1, tjd, 'f');
fprintf(fp, "%5s | ", ppt_hm((border - tjd) * 24.0));
}
if (mendnakshatra == nakshatra) fprintf(fp, " / | ");
fprintf(fp, "%8s ", yoganaama[yoga]);
if (mendyoga == yoga + 2)
{
searchforpan(S_YOGA, yoga + 2, tjd, 'f'); // search for *start* of yoga + 2
secondyoga = yoga + 1; // we need to print name of yoga + 1
strcpy(bsecondyoga, ppt_hm((border - tjd) * 24.0));
}
if (mendyoga > yoga) // tests for yoga + 1 and yoga + 2
{
searchforpan(S_YOGA, yoga + 1, tjd, 'f');
fprintf(fp, "%5s | ", ppt_hm((border - tjd) * 24.0));
}
if (mendyoga == yoga) fprintf(fp, " / | ");
writekarananaama(karana);
searchforpan(S_KARANA, karana + 1, tjd, 'f'); // max karana size is larger than half-day, so 'f'
fprintf(fp, "%5s ", ppt_hm((border - tjd) * 24.0));
writekarananaama(karana + 1);
if (mendkarana == karana + 3)
{
searchforpan(S_KARANA, karana + 3, tjd, 'f'); // search for *start* of karana + 3
thirdkarana = karana + 2; // we need to print name of karana + 2
strcpy(bthirdkarana, ppt_hm((border - tjd) * 24.0));
}
if (mendkarana > karana + 1) // tests for karana + 2 and karana + 3
{
searchforpan(S_KARANA, karana + 2, tjd, 'f'); // search for *start* of karana + 2
fprintf(fp, "%5s", ppt_hm((border - tjd) * 24.0));
}
if (mendkarana == karana + 1) fprintf(fp, " /");
fprintf(fp, "\n");
if (extraexists)
{
fprintf(fp, " | | "); // date and times
if (secondtithi == 300) fprintf(fp, " - - - | "); // paksha and tithi
else
{
if (secondtithi < 15) fprintf(fp, "Sh "); else fprintf(fp, "Kr ");
writetithinaama(secondtithi % 30);
fprintf(fp, "%5s | ", bsecondtithi);
}
fprintf(fp, " - | "); // vaasara
if (secondnakshatra == 300) fprintf(fp, " - - | "); // nakshatra
else
{
fprintf(fp, "%8s ", nakshatranaama[secondnakshatra % 27]);
fprintf(fp, "%5s | ", bsecondnakshatra);
}
if (secondyoga == 300) fprintf(fp, " - - | "); // yoga
else
{
fprintf(fp, "%8s ", yoganaama[secondyoga % 27]);
fprintf(fp, "%5s | ", bsecondyoga);
}
fprintf(fp, " - - "); // first karana
if (thirdkarana == 300) fprintf(fp, " - -"); // second karana
else
{
writekarananaama(thirdkarana % 60);
fprintf(fp, "%5s", bthirdkarana); // two spaces just for consistency
}
fprintf(fp, "\n");
}
tithi = endtithi;
nakshatra = endnakshatra;
yoga = endyoga;
karana = endkarana;
prev_sunset = this_sunset;
}
fclose(fp);
}
[-- Attachment #1.3: valgrind-output --]
[-- Type: text/plain, Size: 38586 bytes --]
samjnaa@chandas:~/bin/swisseph/panchaanga> valgrind --tool=memcheck ./monthpan
==8908== Memcheck, a memory error detector.
==8908== Copyright (C) 2002-2005, and GNU GPL'd, by Julian Seward et al.
==8908== Using LibVEX rev 1575, a library for dynamic binary translation.
==8908== Copyright (C) 2004-2005, and GNU GPL'd, by OpenWorks LLP.
==8908== Using valgrind-3.1.1, a dynamic binary instrumentation framework.
==8908== Copyright (C) 2000-2005, and GNU GPL'd, by Julian Seward et al.
==8908== For more details, rerun with: -v
==8908==
Electric Fence 2.2.0 Copyright (C) 1987-1999 Bruce Perens <bruce@perens.com>
Please provide the start and end Gregorian dates.
Years must be in the range 1800 to 2399 CCE ("AD"). Two-digit years are not accepted.
The timezone must be specified in terms of the UTC offset, positive east of Greenwich.
Please enter the start date.
Date as YYYY-MM-DD : 2006-05-15
Please enter the end date.
Date as YYYY-MM-DD : 2006-06-14
==8908== Conditional jump or move depends on uninitialised value(s)
==8908== at 0x805A784: swi_cartpol_sp (swephlib.c:347)
==8908== by 0x804E302: app_pos_rest (sweph.c:2375)
==8908== by 0x8050B04: app_pos_etc_sun (sweph.c:3179)
==8908== by 0x8051B11: main_planet (sweph.c:1259)
==8908== by 0x8054D4B: swecalc (sweph.c:675)
==8908== by 0x8056F56: swe_calc (sweph.c:288)
==8908== by 0x806199D: swe_rise_trans (swecl.c:2905)
==8908== by 0x8049AD0: listsplpanchaanga (monthpan.c:512)
==8908== by 0x804AC97: main (monthpan.c:148)
==8908==
==8908== Conditional jump or move depends on uninitialised value(s)
==8908== at 0x805A78A: swi_cartpol_sp (swephlib.c:347)
==8908== by 0x804E302: app_pos_rest (sweph.c:2375)
==8908== by 0x8050B04: app_pos_etc_sun (sweph.c:3179)
==8908== by 0x8051B11: main_planet (sweph.c:1259)
==8908== by 0x8054D4B: swecalc (sweph.c:675)
==8908== by 0x8056F56: swe_calc (sweph.c:288)
==8908== by 0x806199D: swe_rise_trans (swecl.c:2905)
==8908== by 0x8049AD0: listsplpanchaanga (monthpan.c:512)
==8908== by 0x804AC97: main (monthpan.c:148)
==8908==
==8908== Conditional jump or move depends on uninitialised value(s)
==8908== at 0x805A79E: swi_cartpol_sp (swephlib.c:347)
==8908== by 0x804E302: app_pos_rest (sweph.c:2375)
==8908== by 0x8050B04: app_pos_etc_sun (sweph.c:3179)
==8908== by 0x8051B11: main_planet (sweph.c:1259)
==8908== by 0x8054D4B: swecalc (sweph.c:675)
==8908== by 0x8056F56: swe_calc (sweph.c:288)
==8908== by 0x806199D: swe_rise_trans (swecl.c:2905)
==8908== by 0x8049AD0: listsplpanchaanga (monthpan.c:512)
==8908== by 0x804AC97: main (monthpan.c:148)
==8908==
==8908== Conditional jump or move depends on uninitialised value(s)
==8908== at 0x805A7A0: swi_cartpol_sp (swephlib.c:347)
==8908== by 0x804E302: app_pos_rest (sweph.c:2375)
==8908== by 0x8050B04: app_pos_etc_sun (sweph.c:3179)
==8908== by 0x8051B11: main_planet (sweph.c:1259)
==8908== by 0x8054D4B: swecalc (sweph.c:675)
==8908== by 0x8056F56: swe_calc (sweph.c:288)
==8908== by 0x806199D: swe_rise_trans (swecl.c:2905)
==8908== by 0x8049AD0: listsplpanchaanga (monthpan.c:512)
==8908== by 0x804AC97: main (monthpan.c:148)
==8908==
==8908== Conditional jump or move depends on uninitialised value(s)
==8908== at 0x805A8C9: swi_cartpol_sp (swephlib.c:347)
==8908== by 0x804E302: app_pos_rest (sweph.c:2375)
==8908== by 0x8050B04: app_pos_etc_sun (sweph.c:3179)
==8908== by 0x8051B11: main_planet (sweph.c:1259)
==8908== by 0x8054D4B: swecalc (sweph.c:675)
==8908== by 0x8056F56: swe_calc (sweph.c:288)
==8908== by 0x806199D: swe_rise_trans (swecl.c:2905)
==8908== by 0x8049AD0: listsplpanchaanga (monthpan.c:512)
==8908== by 0x804AC97: main (monthpan.c:148)
==8908==
==8908== Conditional jump or move depends on uninitialised value(s)
==8908== at 0x805A7D3: swi_cartpol_sp (swephlib.c:354)
==8908== by 0x804E302: app_pos_rest (sweph.c:2375)
==8908== by 0x8050B04: app_pos_etc_sun (sweph.c:3179)
==8908== by 0x8051B11: main_planet (sweph.c:1259)
==8908== by 0x8054D4B: swecalc (sweph.c:675)
==8908== by 0x8056F56: swe_calc (sweph.c:288)
==8908== by 0x806199D: swe_rise_trans (swecl.c:2905)
==8908== by 0x8049AD0: listsplpanchaanga (monthpan.c:512)
==8908== by 0x804AC97: main (monthpan.c:148)
==8908==
==8908== Conditional jump or move depends on uninitialised value(s)
==8908== at 0x805A7D5: swi_cartpol_sp (swephlib.c:354)
==8908== by 0x804E302: app_pos_rest (sweph.c:2375)
==8908== by 0x8050B04: app_pos_etc_sun (sweph.c:3179)
==8908== by 0x8051B11: main_planet (sweph.c:1259)
==8908== by 0x8054D4B: swecalc (sweph.c:675)
==8908== by 0x8056F56: swe_calc (sweph.c:288)
==8908== by 0x806199D: swe_rise_trans (swecl.c:2905)
==8908== by 0x8049AD0: listsplpanchaanga (monthpan.c:512)
==8908== by 0x804AC97: main (monthpan.c:148)
==8908==
==8908== Conditional jump or move depends on uninitialised value(s)
==8908== at 0x805A7F8: swi_cartpol_sp (swephlib.c:355)
==8908== by 0x804E302: app_pos_rest (sweph.c:2375)
==8908== by 0x8050B04: app_pos_etc_sun (sweph.c:3179)
==8908== by 0x8051B11: main_planet (sweph.c:1259)
==8908== by 0x8054D4B: swecalc (sweph.c:675)
==8908== by 0x8056F56: swe_calc (sweph.c:288)
==8908== by 0x806199D: swe_rise_trans (swecl.c:2905)
==8908== by 0x8049AD0: listsplpanchaanga (monthpan.c:512)
==8908== by 0x804AC97: main (monthpan.c:148)
==8908==
==8908== Conditional jump or move depends on uninitialised value(s)
==8908== at 0x805A7FE: swi_cartpol_sp (swephlib.c:355)
==8908== by 0x804E302: app_pos_rest (sweph.c:2375)
==8908== by 0x8050B04: app_pos_etc_sun (sweph.c:3179)
==8908== by 0x8051B11: main_planet (sweph.c:1259)
==8908== by 0x8054D4B: swecalc (sweph.c:675)
==8908== by 0x8056F56: swe_calc (sweph.c:288)
==8908== by 0x806199D: swe_rise_trans (swecl.c:2905)
==8908== by 0x8049AD0: listsplpanchaanga (monthpan.c:512)
==8908== by 0x804AC97: main (monthpan.c:148)
==8908==
==8908== Conditional jump or move depends on uninitialised value(s)
==8908== at 0x805A784: swi_cartpol_sp (swephlib.c:347)
==8908== by 0x804E311: app_pos_rest (sweph.c:2376)
==8908== by 0x8050B04: app_pos_etc_sun (sweph.c:3179)
==8908== by 0x8051B11: main_planet (sweph.c:1259)
==8908== by 0x8054D4B: swecalc (sweph.c:675)
==8908== by 0x8056F56: swe_calc (sweph.c:288)
==8908== by 0x806199D: swe_rise_trans (swecl.c:2905)
==8908== by 0x8049AD0: listsplpanchaanga (monthpan.c:512)
==8908== by 0x804AC97: main (monthpan.c:148)
==8908==
==8908== Conditional jump or move depends on uninitialised value(s)
==8908== at 0x805A78A: swi_cartpol_sp (swephlib.c:347)
==8908== by 0x804E311: app_pos_rest (sweph.c:2376)
==8908== by 0x8050B04: app_pos_etc_sun (sweph.c:3179)
==8908== by 0x8051B11: main_planet (sweph.c:1259)
==8908== by 0x8054D4B: swecalc (sweph.c:675)
==8908== by 0x8056F56: swe_calc (sweph.c:288)
==8908== by 0x806199D: swe_rise_trans (swecl.c:2905)
==8908== by 0x8049AD0: listsplpanchaanga (monthpan.c:512)
==8908== by 0x804AC97: main (monthpan.c:148)
==8908==
==8908== Conditional jump or move depends on uninitialised value(s)
==8908== at 0x805A79E: swi_cartpol_sp (swephlib.c:347)
==8908== by 0x804E311: app_pos_rest (sweph.c:2376)
==8908== by 0x8050B04: app_pos_etc_sun (sweph.c:3179)
==8908== by 0x8051B11: main_planet (sweph.c:1259)
==8908== by 0x8054D4B: swecalc (sweph.c:675)
==8908== by 0x8056F56: swe_calc (sweph.c:288)
==8908== by 0x806199D: swe_rise_trans (swecl.c:2905)
==8908== by 0x8049AD0: listsplpanchaanga (monthpan.c:512)
==8908== by 0x804AC97: main (monthpan.c:148)
==8908==
==8908== Conditional jump or move depends on uninitialised value(s)
==8908== at 0x805A7A0: swi_cartpol_sp (swephlib.c:347)
==8908== by 0x804E311: app_pos_rest (sweph.c:2376)
==8908== by 0x8050B04: app_pos_etc_sun (sweph.c:3179)
==8908== by 0x8051B11: main_planet (sweph.c:1259)
==8908== by 0x8054D4B: swecalc (sweph.c:675)
==8908== by 0x8056F56: swe_calc (sweph.c:288)
==8908== by 0x806199D: swe_rise_trans (swecl.c:2905)
==8908== by 0x8049AD0: listsplpanchaanga (monthpan.c:512)
==8908== by 0x804AC97: main (monthpan.c:148)
==8908==
==8908== Conditional jump or move depends on uninitialised value(s)
==8908== at 0x805A8C9: swi_cartpol_sp (swephlib.c:347)
==8908== by 0x804E311: app_pos_rest (sweph.c:2376)
==8908== by 0x8050B04: app_pos_etc_sun (sweph.c:3179)
==8908== by 0x8051B11: main_planet (sweph.c:1259)
==8908== by 0x8054D4B: swecalc (sweph.c:675)
==8908== by 0x8056F56: swe_calc (sweph.c:288)
==8908== by 0x806199D: swe_rise_trans (swecl.c:2905)
==8908== by 0x8049AD0: listsplpanchaanga (monthpan.c:512)
==8908== by 0x804AC97: main (monthpan.c:148)
==8908==
==8908== Conditional jump or move depends on uninitialised value(s)
==8908== at 0x805A7D3: swi_cartpol_sp (swephlib.c:354)
==8908== by 0x804E311: app_pos_rest (sweph.c:2376)
==8908== by 0x8050B04: app_pos_etc_sun (sweph.c:3179)
==8908== by 0x8051B11: main_planet (sweph.c:1259)
==8908== by 0x8054D4B: swecalc (sweph.c:675)
==8908== by 0x8056F56: swe_calc (sweph.c:288)
==8908== by 0x806199D: swe_rise_trans (swecl.c:2905)
==8908== by 0x8049AD0: listsplpanchaanga (monthpan.c:512)
==8908== by 0x804AC97: main (monthpan.c:148)
==8908==
==8908== Conditional jump or move depends on uninitialised value(s)
==8908== at 0x805A7D5: swi_cartpol_sp (swephlib.c:354)
==8908== by 0x804E311: app_pos_rest (sweph.c:2376)
==8908== by 0x8050B04: app_pos_etc_sun (sweph.c:3179)
==8908== by 0x8051B11: main_planet (sweph.c:1259)
==8908== by 0x8054D4B: swecalc (sweph.c:675)
==8908== by 0x8056F56: swe_calc (sweph.c:288)
==8908== by 0x806199D: swe_rise_trans (swecl.c:2905)
==8908== by 0x8049AD0: listsplpanchaanga (monthpan.c:512)
==8908== by 0x804AC97: main (monthpan.c:148)
==8908==
==8908== Conditional jump or move depends on uninitialised value(s)
==8908== at 0x805A7F8: swi_cartpol_sp (swephlib.c:355)
==8908== by 0x804E311: app_pos_rest (sweph.c:2376)
==8908== by 0x8050B04: app_pos_etc_sun (sweph.c:3179)
==8908== by 0x8051B11: main_planet (sweph.c:1259)
==8908== by 0x8054D4B: swecalc (sweph.c:675)
==8908== by 0x8056F56: swe_calc (sweph.c:288)
==8908== by 0x806199D: swe_rise_trans (swecl.c:2905)
==8908== by 0x8049AD0: listsplpanchaanga (monthpan.c:512)
==8908== by 0x804AC97: main (monthpan.c:148)
==8908==
==8908== Conditional jump or move depends on uninitialised value(s)
==8908== at 0x805A7FE: swi_cartpol_sp (swephlib.c:355)
==8908== by 0x804E311: app_pos_rest (sweph.c:2376)
==8908== by 0x8050B04: app_pos_etc_sun (sweph.c:3179)
==8908== by 0x8051B11: main_planet (sweph.c:1259)
==8908== by 0x8054D4B: swecalc (sweph.c:675)
==8908== by 0x8056F56: swe_calc (sweph.c:288)
==8908== by 0x806199D: swe_rise_trans (swecl.c:2905)
==8908== by 0x8049AD0: listsplpanchaanga (monthpan.c:512)
==8908== by 0x804AC97: main (monthpan.c:148)
==8908==
==8908== Invalid read of size 1
==8908== at 0x4021FB8: strlen (in /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)
==8908== by 0x40A0807: vfprintf (in /lib/libc-2.4.so)
==8908== by 0x40A5C92: printf (in /lib/libc-2.4.so)
==8908== by 0x8049B71: listsplpanchaanga (monthpan.c:593)
==8908== by 0x804AC97: main (monthpan.c:148)
==8908== Address 0x726956 is not stack'd, malloc'd or (recently) free'd
==8908==
==8908== Process terminating with default action of signal 11 (SIGSEGV)
==8908== Access not within mapped region at address 0x726956
==8908== at 0x4021FB8: strlen (in /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)
==8908== by 0x40A0807: vfprintf (in /lib/libc-2.4.so)
==8908== by 0x40A5C92: printf (in /lib/libc-2.4.so)
==8908== by 0x8049B71: listsplpanchaanga (monthpan.c:593)
==8908== by 0x804AC97: main (monthpan.c:148)
grahanaama[0] = ==8908==
==8908== ERROR SUMMARY: 4419 errors from 19 contexts (suppressed: 3 from 1)
==8908== malloc/free: in use at exit: 0 bytes in 0 blocks.
==8908== malloc/free: 0 allocs, 0 frees, 0 bytes allocated.
==8908== For counts of detected errors, rerun with: -v
==8908== All heap blocks were freed -- no leaks are possible.
Segmentation fault
samjnaa@chandas:~/bin/swisseph/panchaanga> make
gcc -c -g -O2 -Wall monthpan.c
gcc -g -O2 -Wall -o monthpan monthpan.o -L. -lswe -lm -lefence
samjnaa@chandas:~/bin/swisseph/panchaanga> valgrind --tool=memcheck ./monthpan
==9160== Memcheck, a memory error detector.
==9160== Copyright (C) 2002-2005, and GNU GPL'd, by Julian Seward et al.
==9160== Using LibVEX rev 1575, a library for dynamic binary translation.
==9160== Copyright (C) 2004-2005, and GNU GPL'd, by OpenWorks LLP.
==9160== Using valgrind-3.1.1, a dynamic binary instrumentation framework.
==9160== Copyright (C) 2000-2005, and GNU GPL'd, by Julian Seward et al.
==9160== For more details, rerun with: -v
==9160==
Electric Fence 2.2.0 Copyright (C) 1987-1999 Bruce Perens <bruce@perens.com>
Please provide the start and end Gregorian dates.
Years must be in the range 1800 to 2399 CCE ("AD"). Two-digit years are not accepted.
The timezone must be specified in terms of the UTC offset, positive east of Greenwich.
Please enter the start date.
Date as YYYY-MM-DD : 2006-05-15
Please enter the end date.
Date as YYYY-MM-DD : 2006-06-14
==9160== Conditional jump or move depends on uninitialised value(s)
==9160== at 0x805A754: swi_cartpol_sp (swephlib.c:347)
==9160== by 0x804E2D2: app_pos_rest (sweph.c:2375)
==9160== by 0x8050AD4: app_pos_etc_sun (sweph.c:3179)
==9160== by 0x8051AE1: main_planet (sweph.c:1259)
==9160== by 0x8054D1B: swecalc (sweph.c:675)
==9160== by 0x8056F26: swe_calc (sweph.c:288)
==9160== by 0x806196D: swe_rise_trans (swecl.c:2905)
==9160== by 0x8049AD0: listsplpanchaanga (monthpan.c:512)
==9160== by 0x804AC67: main (monthpan.c:148)
==9160==
==9160== Conditional jump or move depends on uninitialised value(s)
==9160== at 0x805A75A: swi_cartpol_sp (swephlib.c:347)
==9160== by 0x804E2D2: app_pos_rest (sweph.c:2375)
==9160== by 0x8050AD4: app_pos_etc_sun (sweph.c:3179)
==9160== by 0x8051AE1: main_planet (sweph.c:1259)
==9160== by 0x8054D1B: swecalc (sweph.c:675)
==9160== by 0x8056F26: swe_calc (sweph.c:288)
==9160== by 0x806196D: swe_rise_trans (swecl.c:2905)
==9160== by 0x8049AD0: listsplpanchaanga (monthpan.c:512)
==9160== by 0x804AC67: main (monthpan.c:148)
==9160==
==9160== Conditional jump or move depends on uninitialised value(s)
==9160== at 0x805A76E: swi_cartpol_sp (swephlib.c:347)
==9160== by 0x804E2D2: app_pos_rest (sweph.c:2375)
==9160== by 0x8050AD4: app_pos_etc_sun (sweph.c:3179)
==9160== by 0x8051AE1: main_planet (sweph.c:1259)
==9160== by 0x8054D1B: swecalc (sweph.c:675)
==9160== by 0x8056F26: swe_calc (sweph.c:288)
==9160== by 0x806196D: swe_rise_trans (swecl.c:2905)
==9160== by 0x8049AD0: listsplpanchaanga (monthpan.c:512)
==9160== by 0x804AC67: main (monthpan.c:148)
==9160==
==9160== Conditional jump or move depends on uninitialised value(s)
==9160== at 0x805A770: swi_cartpol_sp (swephlib.c:347)
==9160== by 0x804E2D2: app_pos_rest (sweph.c:2375)
==9160== by 0x8050AD4: app_pos_etc_sun (sweph.c:3179)
==9160== by 0x8051AE1: main_planet (sweph.c:1259)
==9160== by 0x8054D1B: swecalc (sweph.c:675)
==9160== by 0x8056F26: swe_calc (sweph.c:288)
==9160== by 0x806196D: swe_rise_trans (swecl.c:2905)
==9160== by 0x8049AD0: listsplpanchaanga (monthpan.c:512)
==9160== by 0x804AC67: main (monthpan.c:148)
==9160==
==9160== Conditional jump or move depends on uninitialised value(s)
==9160== at 0x805A899: swi_cartpol_sp (swephlib.c:347)
==9160== by 0x804E2D2: app_pos_rest (sweph.c:2375)
==9160== by 0x8050AD4: app_pos_etc_sun (sweph.c:3179)
==9160== by 0x8051AE1: main_planet (sweph.c:1259)
==9160== by 0x8054D1B: swecalc (sweph.c:675)
==9160== by 0x8056F26: swe_calc (sweph.c:288)
==9160== by 0x806196D: swe_rise_trans (swecl.c:2905)
==9160== by 0x8049AD0: listsplpanchaanga (monthpan.c:512)
==9160== by 0x804AC67: main (monthpan.c:148)
==9160==
==9160== Conditional jump or move depends on uninitialised value(s)
==9160== at 0x805A7A3: swi_cartpol_sp (swephlib.c:354)
==9160== by 0x804E2D2: app_pos_rest (sweph.c:2375)
==9160== by 0x8050AD4: app_pos_etc_sun (sweph.c:3179)
==9160== by 0x8051AE1: main_planet (sweph.c:1259)
==9160== by 0x8054D1B: swecalc (sweph.c:675)
==9160== by 0x8056F26: swe_calc (sweph.c:288)
==9160== by 0x806196D: swe_rise_trans (swecl.c:2905)
==9160== by 0x8049AD0: listsplpanchaanga (monthpan.c:512)
==9160== by 0x804AC67: main (monthpan.c:148)
==9160==
==9160== Conditional jump or move depends on uninitialised value(s)
==9160== at 0x805A7A5: swi_cartpol_sp (swephlib.c:354)
==9160== by 0x804E2D2: app_pos_rest (sweph.c:2375)
==9160== by 0x8050AD4: app_pos_etc_sun (sweph.c:3179)
==9160== by 0x8051AE1: main_planet (sweph.c:1259)
==9160== by 0x8054D1B: swecalc (sweph.c:675)
==9160== by 0x8056F26: swe_calc (sweph.c:288)
==9160== by 0x806196D: swe_rise_trans (swecl.c:2905)
==9160== by 0x8049AD0: listsplpanchaanga (monthpan.c:512)
==9160== by 0x804AC67: main (monthpan.c:148)
==9160==
==9160== Conditional jump or move depends on uninitialised value(s)
==9160== at 0x805A7C8: swi_cartpol_sp (swephlib.c:355)
==9160== by 0x804E2D2: app_pos_rest (sweph.c:2375)
==9160== by 0x8050AD4: app_pos_etc_sun (sweph.c:3179)
==9160== by 0x8051AE1: main_planet (sweph.c:1259)
==9160== by 0x8054D1B: swecalc (sweph.c:675)
==9160== by 0x8056F26: swe_calc (sweph.c:288)
==9160== by 0x806196D: swe_rise_trans (swecl.c:2905)
==9160== by 0x8049AD0: listsplpanchaanga (monthpan.c:512)
==9160== by 0x804AC67: main (monthpan.c:148)
==9160==
==9160== Conditional jump or move depends on uninitialised value(s)
==9160== at 0x805A7CE: swi_cartpol_sp (swephlib.c:355)
==9160== by 0x804E2D2: app_pos_rest (sweph.c:2375)
==9160== by 0x8050AD4: app_pos_etc_sun (sweph.c:3179)
==9160== by 0x8051AE1: main_planet (sweph.c:1259)
==9160== by 0x8054D1B: swecalc (sweph.c:675)
==9160== by 0x8056F26: swe_calc (sweph.c:288)
==9160== by 0x806196D: swe_rise_trans (swecl.c:2905)
==9160== by 0x8049AD0: listsplpanchaanga (monthpan.c:512)
==9160== by 0x804AC67: main (monthpan.c:148)
==9160==
==9160== Conditional jump or move depends on uninitialised value(s)
==9160== at 0x805A754: swi_cartpol_sp (swephlib.c:347)
==9160== by 0x804E2E1: app_pos_rest (sweph.c:2376)
==9160== by 0x8050AD4: app_pos_etc_sun (sweph.c:3179)
==9160== by 0x8051AE1: main_planet (sweph.c:1259)
==9160== by 0x8054D1B: swecalc (sweph.c:675)
==9160== by 0x8056F26: swe_calc (sweph.c:288)
==9160== by 0x806196D: swe_rise_trans (swecl.c:2905)
==9160== by 0x8049AD0: listsplpanchaanga (monthpan.c:512)
==9160== by 0x804AC67: main (monthpan.c:148)
==9160==
==9160== Conditional jump or move depends on uninitialised value(s)
==9160== at 0x805A75A: swi_cartpol_sp (swephlib.c:347)
==9160== by 0x804E2E1: app_pos_rest (sweph.c:2376)
==9160== by 0x8050AD4: app_pos_etc_sun (sweph.c:3179)
==9160== by 0x8051AE1: main_planet (sweph.c:1259)
==9160== by 0x8054D1B: swecalc (sweph.c:675)
==9160== by 0x8056F26: swe_calc (sweph.c:288)
==9160== by 0x806196D: swe_rise_trans (swecl.c:2905)
==9160== by 0x8049AD0: listsplpanchaanga (monthpan.c:512)
==9160== by 0x804AC67: main (monthpan.c:148)
==9160==
==9160== Conditional jump or move depends on uninitialised value(s)
==9160== at 0x805A76E: swi_cartpol_sp (swephlib.c:347)
==9160== by 0x804E2E1: app_pos_rest (sweph.c:2376)
==9160== by 0x8050AD4: app_pos_etc_sun (sweph.c:3179)
==9160== by 0x8051AE1: main_planet (sweph.c:1259)
==9160== by 0x8054D1B: swecalc (sweph.c:675)
==9160== by 0x8056F26: swe_calc (sweph.c:288)
==9160== by 0x806196D: swe_rise_trans (swecl.c:2905)
==9160== by 0x8049AD0: listsplpanchaanga (monthpan.c:512)
==9160== by 0x804AC67: main (monthpan.c:148)
==9160==
==9160== Conditional jump or move depends on uninitialised value(s)
==9160== at 0x805A770: swi_cartpol_sp (swephlib.c:347)
==9160== by 0x804E2E1: app_pos_rest (sweph.c:2376)
==9160== by 0x8050AD4: app_pos_etc_sun (sweph.c:3179)
==9160== by 0x8051AE1: main_planet (sweph.c:1259)
==9160== by 0x8054D1B: swecalc (sweph.c:675)
==9160== by 0x8056F26: swe_calc (sweph.c:288)
==9160== by 0x806196D: swe_rise_trans (swecl.c:2905)
==9160== by 0x8049AD0: listsplpanchaanga (monthpan.c:512)
==9160== by 0x804AC67: main (monthpan.c:148)
==9160==
==9160== Conditional jump or move depends on uninitialised value(s)
==9160== at 0x805A899: swi_cartpol_sp (swephlib.c:347)
==9160== by 0x804E2E1: app_pos_rest (sweph.c:2376)
==9160== by 0x8050AD4: app_pos_etc_sun (sweph.c:3179)
==9160== by 0x8051AE1: main_planet (sweph.c:1259)
==9160== by 0x8054D1B: swecalc (sweph.c:675)
==9160== by 0x8056F26: swe_calc (sweph.c:288)
==9160== by 0x806196D: swe_rise_trans (swecl.c:2905)
==9160== by 0x8049AD0: listsplpanchaanga (monthpan.c:512)
==9160== by 0x804AC67: main (monthpan.c:148)
==9160==
==9160== Conditional jump or move depends on uninitialised value(s)
==9160== at 0x805A7A3: swi_cartpol_sp (swephlib.c:354)
==9160== by 0x804E2E1: app_pos_rest (sweph.c:2376)
==9160== by 0x8050AD4: app_pos_etc_sun (sweph.c:3179)
==9160== by 0x8051AE1: main_planet (sweph.c:1259)
==9160== by 0x8054D1B: swecalc (sweph.c:675)
==9160== by 0x8056F26: swe_calc (sweph.c:288)
==9160== by 0x806196D: swe_rise_trans (swecl.c:2905)
==9160== by 0x8049AD0: listsplpanchaanga (monthpan.c:512)
==9160== by 0x804AC67: main (monthpan.c:148)
==9160==
==9160== Conditional jump or move depends on uninitialised value(s)
==9160== at 0x805A7A5: swi_cartpol_sp (swephlib.c:354)
==9160== by 0x804E2E1: app_pos_rest (sweph.c:2376)
==9160== by 0x8050AD4: app_pos_etc_sun (sweph.c:3179)
==9160== by 0x8051AE1: main_planet (sweph.c:1259)
==9160== by 0x8054D1B: swecalc (sweph.c:675)
==9160== by 0x8056F26: swe_calc (sweph.c:288)
==9160== by 0x806196D: swe_rise_trans (swecl.c:2905)
==9160== by 0x8049AD0: listsplpanchaanga (monthpan.c:512)
==9160== by 0x804AC67: main (monthpan.c:148)
==9160==
==9160== Conditional jump or move depends on uninitialised value(s)
==9160== at 0x805A7C8: swi_cartpol_sp (swephlib.c:355)
==9160== by 0x804E2E1: app_pos_rest (sweph.c:2376)
==9160== by 0x8050AD4: app_pos_etc_sun (sweph.c:3179)
==9160== by 0x8051AE1: main_planet (sweph.c:1259)
==9160== by 0x8054D1B: swecalc (sweph.c:675)
==9160== by 0x8056F26: swe_calc (sweph.c:288)
==9160== by 0x806196D: swe_rise_trans (swecl.c:2905)
==9160== by 0x8049AD0: listsplpanchaanga (monthpan.c:512)
==9160== by 0x804AC67: main (monthpan.c:148)
==9160==
==9160== Conditional jump or move depends on uninitialised value(s)
==9160== at 0x805A7CE: swi_cartpol_sp (swephlib.c:355)
==9160== by 0x804E2E1: app_pos_rest (sweph.c:2376)
==9160== by 0x8050AD4: app_pos_etc_sun (sweph.c:3179)
==9160== by 0x8051AE1: main_planet (sweph.c:1259)
==9160== by 0x8054D1B: swecalc (sweph.c:675)
==9160== by 0x8056F26: swe_calc (sweph.c:288)
==9160== by 0x806196D: swe_rise_trans (swecl.c:2905)
==9160== by 0x8049AD0: listsplpanchaanga (monthpan.c:512)
==9160== by 0x804AC67: main (monthpan.c:148)
==9160==
==9160== Invalid read of size 1
==9160== at 0x4021FB8: strlen (in /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)
==9160== by 0x40A0807: vfprintf (in /lib/libc-2.4.so)
==9160== by 0x40A5C92: printf (in /lib/libc-2.4.so)
==9160== by 0x8049B7D: listsplpanchaanga (monthpan.c:593)
==9160== by 0x804AC67: main (monthpan.c:148)
==9160== Address 0x726956 is not stack'd, malloc'd or (recently) free'd
==9160==
==9160== Process terminating with default action of signal 11 (SIGSEGV)
==9160== Access not within mapped region at address 0x726956
==9160== at 0x4021FB8: strlen (in /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)
==9160== by 0x40A0807: vfprintf (in /lib/libc-2.4.so)
==9160== by 0x40A5C92: printf (in /lib/libc-2.4.so)
==9160== by 0x8049B7D: listsplpanchaanga (monthpan.c:593)
==9160== by 0x804AC67: main (monthpan.c:148)
debug: vaasara = 1, graha = Somadebug: vaasara = 2, graha = Mangaladebug: vaasara = 3, graha = Budhadebug: vaasara = 4, graha = Gurudebug: vaasara = 5, graha = Shukradebug: vaasara = 6, graha = Shanidebug: vaasara = 0, graha = ==9160==
==9160== ERROR SUMMARY: 22083 errors from 19 contexts (suppressed: 3 from 1)
==9160== malloc/free: in use at exit: 0 bytes in 0 blocks.
==9160== malloc/free: 0 allocs, 0 frees, 0 bytes allocated.
==9160== For counts of detected errors, rerun with: -v
==9160== All heap blocks were freed -- no leaks are possible.
Segmentation fault
samjnaa@chandas:~/bin/swisseph/panchaanga> make
gcc -c -g -O2 -Wall monthpan.c
gcc -g -O2 -Wall -o monthpan monthpan.o -L. -lswe -lm -lefence
samjnaa@chandas:~/bin/swisseph/panchaanga> valgrind --tool=memcheck ./monthpan > oput
==9579== Memcheck, a memory error detector.
==9579== Copyright (C) 2002-2005, and GNU GPL'd, by Julian Seward et al.
==9579== Using LibVEX rev 1575, a library for dynamic binary translation.
==9579== Copyright (C) 2004-2005, and GNU GPL'd, by OpenWorks LLP.
==9579== Using valgrind-3.1.1, a dynamic binary instrumentation framework.
==9579== Copyright (C) 2000-2005, and GNU GPL'd, by Julian Seward et al.
==9579== For more details, rerun with: -v
==9579==
Electric Fence 2.2.0 Copyright (C) 1987-1999 Bruce Perens <bruce@perens.com>
==9579==
==9579== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 3 from 1)
==9579== malloc/free: in use at exit: 0 bytes in 0 blocks.
==9579== malloc/free: 0 allocs, 0 frees, 0 bytes allocated.
==9579== For counts of detected errors, rerun with: -v
==9579== All heap blocks were freed -- no leaks are possible.
samjnaa@chandas:~/bin/swisseph/panchaanga> valgrind --tool=memcheck ./monthpan
==9675== Memcheck, a memory error detector.
==9675== Copyright (C) 2002-2005, and GNU GPL'd, by Julian Seward et al.
==9675== Using LibVEX rev 1575, a library for dynamic binary translation.
==9675== Copyright (C) 2004-2005, and GNU GPL'd, by OpenWorks LLP.
==9675== Using valgrind-3.1.1, a dynamic binary instrumentation framework.
==9675== Copyright (C) 2000-2005, and GNU GPL'd, by Julian Seward et al.
==9675== For more details, rerun with: -v
==9675==
Electric Fence 2.2.0 Copyright (C) 1987-1999 Bruce Perens <bruce@perens.com>
Please provide the start and end Gregorian dates.
Years must be in the range 1800 to 2399 CCE ("AD"). Two-digit years are not accepted.
The timezone must be specified in terms of the UTC offset, positive east of Greenwich.
Please enter the start date.
Date as YYYY-MM-DD : 2006-05-15
Please enter the end date.
Date as YYYY-MM-DD : 2006-06-14
==9675== Conditional jump or move depends on uninitialised value(s)
==9675== at 0x805A754: swi_cartpol_sp (swephlib.c:347)
==9675== by 0x804E2D2: app_pos_rest (sweph.c:2375)
==9675== by 0x8050AD4: app_pos_etc_sun (sweph.c:3179)
==9675== by 0x8051AE1: main_planet (sweph.c:1259)
==9675== by 0x8054D1B: swecalc (sweph.c:675)
==9675== by 0x8056F26: swe_calc (sweph.c:288)
==9675== by 0x806196D: swe_rise_trans (swecl.c:2905)
==9675== by 0x8049AD0: listsplpanchaanga (monthpan.c:512)
==9675== by 0x804AC67: main (monthpan.c:148)
==9675==
==9675== Conditional jump or move depends on uninitialised value(s)
==9675== at 0x805A75A: swi_cartpol_sp (swephlib.c:347)
==9675== by 0x804E2D2: app_pos_rest (sweph.c:2375)
==9675== by 0x8050AD4: app_pos_etc_sun (sweph.c:3179)
==9675== by 0x8051AE1: main_planet (sweph.c:1259)
==9675== by 0x8054D1B: swecalc (sweph.c:675)
==9675== by 0x8056F26: swe_calc (sweph.c:288)
==9675== by 0x806196D: swe_rise_trans (swecl.c:2905)
==9675== by 0x8049AD0: listsplpanchaanga (monthpan.c:512)
==9675== by 0x804AC67: main (monthpan.c:148)
==9675==
==9675== Conditional jump or move depends on uninitialised value(s)
==9675== at 0x805A76E: swi_cartpol_sp (swephlib.c:347)
==9675== by 0x804E2D2: app_pos_rest (sweph.c:2375)
==9675== by 0x8050AD4: app_pos_etc_sun (sweph.c:3179)
==9675== by 0x8051AE1: main_planet (sweph.c:1259)
==9675== by 0x8054D1B: swecalc (sweph.c:675)
==9675== by 0x8056F26: swe_calc (sweph.c:288)
==9675== by 0x806196D: swe_rise_trans (swecl.c:2905)
==9675== by 0x8049AD0: listsplpanchaanga (monthpan.c:512)
==9675== by 0x804AC67: main (monthpan.c:148)
==9675==
==9675== Conditional jump or move depends on uninitialised value(s)
==9675== at 0x805A770: swi_cartpol_sp (swephlib.c:347)
==9675== by 0x804E2D2: app_pos_rest (sweph.c:2375)
==9675== by 0x8050AD4: app_pos_etc_sun (sweph.c:3179)
==9675== by 0x8051AE1: main_planet (sweph.c:1259)
==9675== by 0x8054D1B: swecalc (sweph.c:675)
==9675== by 0x8056F26: swe_calc (sweph.c:288)
==9675== by 0x806196D: swe_rise_trans (swecl.c:2905)
==9675== by 0x8049AD0: listsplpanchaanga (monthpan.c:512)
==9675== by 0x804AC67: main (monthpan.c:148)
==9675==
==9675== Conditional jump or move depends on uninitialised value(s)
==9675== at 0x805A899: swi_cartpol_sp (swephlib.c:347)
==9675== by 0x804E2D2: app_pos_rest (sweph.c:2375)
==9675== by 0x8050AD4: app_pos_etc_sun (sweph.c:3179)
==9675== by 0x8051AE1: main_planet (sweph.c:1259)
==9675== by 0x8054D1B: swecalc (sweph.c:675)
==9675== by 0x8056F26: swe_calc (sweph.c:288)
==9675== by 0x806196D: swe_rise_trans (swecl.c:2905)
==9675== by 0x8049AD0: listsplpanchaanga (monthpan.c:512)
==9675== by 0x804AC67: main (monthpan.c:148)
==9675==
==9675== Conditional jump or move depends on uninitialised value(s)
==9675== at 0x805A7A3: swi_cartpol_sp (swephlib.c:354)
==9675== by 0x804E2D2: app_pos_rest (sweph.c:2375)
==9675== by 0x8050AD4: app_pos_etc_sun (sweph.c:3179)
==9675== by 0x8051AE1: main_planet (sweph.c:1259)
==9675== by 0x8054D1B: swecalc (sweph.c:675)
==9675== by 0x8056F26: swe_calc (sweph.c:288)
==9675== by 0x806196D: swe_rise_trans (swecl.c:2905)
==9675== by 0x8049AD0: listsplpanchaanga (monthpan.c:512)
==9675== by 0x804AC67: main (monthpan.c:148)
==9675==
==9675== Conditional jump or move depends on uninitialised value(s)
==9675== at 0x805A7A5: swi_cartpol_sp (swephlib.c:354)
==9675== by 0x804E2D2: app_pos_rest (sweph.c:2375)
==9675== by 0x8050AD4: app_pos_etc_sun (sweph.c:3179)
==9675== by 0x8051AE1: main_planet (sweph.c:1259)
==9675== by 0x8054D1B: swecalc (sweph.c:675)
==9675== by 0x8056F26: swe_calc (sweph.c:288)
==9675== by 0x806196D: swe_rise_trans (swecl.c:2905)
==9675== by 0x8049AD0: listsplpanchaanga (monthpan.c:512)
==9675== by 0x804AC67: main (monthpan.c:148)
==9675==
==9675== Conditional jump or move depends on uninitialised value(s)
==9675== at 0x805A7C8: swi_cartpol_sp (swephlib.c:355)
==9675== by 0x804E2D2: app_pos_rest (sweph.c:2375)
==9675== by 0x8050AD4: app_pos_etc_sun (sweph.c:3179)
==9675== by 0x8051AE1: main_planet (sweph.c:1259)
==9675== by 0x8054D1B: swecalc (sweph.c:675)
==9675== by 0x8056F26: swe_calc (sweph.c:288)
==9675== by 0x806196D: swe_rise_trans (swecl.c:2905)
==9675== by 0x8049AD0: listsplpanchaanga (monthpan.c:512)
==9675== by 0x804AC67: main (monthpan.c:148)
==9675==
==9675== Conditional jump or move depends on uninitialised value(s)
==9675== at 0x805A7CE: swi_cartpol_sp (swephlib.c:355)
==9675== by 0x804E2D2: app_pos_rest (sweph.c:2375)
==9675== by 0x8050AD4: app_pos_etc_sun (sweph.c:3179)
==9675== by 0x8051AE1: main_planet (sweph.c:1259)
==9675== by 0x8054D1B: swecalc (sweph.c:675)
==9675== by 0x8056F26: swe_calc (sweph.c:288)
==9675== by 0x806196D: swe_rise_trans (swecl.c:2905)
==9675== by 0x8049AD0: listsplpanchaanga (monthpan.c:512)
==9675== by 0x804AC67: main (monthpan.c:148)
==9675==
==9675== Conditional jump or move depends on uninitialised value(s)
==9675== at 0x805A754: swi_cartpol_sp (swephlib.c:347)
==9675== by 0x804E2E1: app_pos_rest (sweph.c:2376)
==9675== by 0x8050AD4: app_pos_etc_sun (sweph.c:3179)
==9675== by 0x8051AE1: main_planet (sweph.c:1259)
==9675== by 0x8054D1B: swecalc (sweph.c:675)
==9675== by 0x8056F26: swe_calc (sweph.c:288)
==9675== by 0x806196D: swe_rise_trans (swecl.c:2905)
==9675== by 0x8049AD0: listsplpanchaanga (monthpan.c:512)
==9675== by 0x804AC67: main (monthpan.c:148)
==9675==
==9675== Conditional jump or move depends on uninitialised value(s)
==9675== at 0x805A75A: swi_cartpol_sp (swephlib.c:347)
==9675== by 0x804E2E1: app_pos_rest (sweph.c:2376)
==9675== by 0x8050AD4: app_pos_etc_sun (sweph.c:3179)
==9675== by 0x8051AE1: main_planet (sweph.c:1259)
==9675== by 0x8054D1B: swecalc (sweph.c:675)
==9675== by 0x8056F26: swe_calc (sweph.c:288)
==9675== by 0x806196D: swe_rise_trans (swecl.c:2905)
==9675== by 0x8049AD0: listsplpanchaanga (monthpan.c:512)
==9675== by 0x804AC67: main (monthpan.c:148)
==9675==
==9675== Conditional jump or move depends on uninitialised value(s)
==9675== at 0x805A76E: swi_cartpol_sp (swephlib.c:347)
==9675== by 0x804E2E1: app_pos_rest (sweph.c:2376)
==9675== by 0x8050AD4: app_pos_etc_sun (sweph.c:3179)
==9675== by 0x8051AE1: main_planet (sweph.c:1259)
==9675== by 0x8054D1B: swecalc (sweph.c:675)
==9675== by 0x8056F26: swe_calc (sweph.c:288)
==9675== by 0x806196D: swe_rise_trans (swecl.c:2905)
==9675== by 0x8049AD0: listsplpanchaanga (monthpan.c:512)
==9675== by 0x804AC67: main (monthpan.c:148)
==9675==
==9675== Conditional jump or move depends on uninitialised value(s)
==9675== at 0x805A770: swi_cartpol_sp (swephlib.c:347)
==9675== by 0x804E2E1: app_pos_rest (sweph.c:2376)
==9675== by 0x8050AD4: app_pos_etc_sun (sweph.c:3179)
==9675== by 0x8051AE1: main_planet (sweph.c:1259)
==9675== by 0x8054D1B: swecalc (sweph.c:675)
==9675== by 0x8056F26: swe_calc (sweph.c:288)
==9675== by 0x806196D: swe_rise_trans (swecl.c:2905)
==9675== by 0x8049AD0: listsplpanchaanga (monthpan.c:512)
==9675== by 0x804AC67: main (monthpan.c:148)
==9675==
==9675== Conditional jump or move depends on uninitialised value(s)
==9675== at 0x805A899: swi_cartpol_sp (swephlib.c:347)
==9675== by 0x804E2E1: app_pos_rest (sweph.c:2376)
==9675== by 0x8050AD4: app_pos_etc_sun (sweph.c:3179)
==9675== by 0x8051AE1: main_planet (sweph.c:1259)
==9675== by 0x8054D1B: swecalc (sweph.c:675)
==9675== by 0x8056F26: swe_calc (sweph.c:288)
==9675== by 0x806196D: swe_rise_trans (swecl.c:2905)
==9675== by 0x8049AD0: listsplpanchaanga (monthpan.c:512)
==9675== by 0x804AC67: main (monthpan.c:148)
==9675==
==9675== Conditional jump or move depends on uninitialised value(s)
==9675== at 0x805A7A3: swi_cartpol_sp (swephlib.c:354)
==9675== by 0x804E2E1: app_pos_rest (sweph.c:2376)
==9675== by 0x8050AD4: app_pos_etc_sun (sweph.c:3179)
==9675== by 0x8051AE1: main_planet (sweph.c:1259)
==9675== by 0x8054D1B: swecalc (sweph.c:675)
==9675== by 0x8056F26: swe_calc (sweph.c:288)
==9675== by 0x806196D: swe_rise_trans (swecl.c:2905)
==9675== by 0x8049AD0: listsplpanchaanga (monthpan.c:512)
==9675== by 0x804AC67: main (monthpan.c:148)
==9675==
==9675== Conditional jump or move depends on uninitialised value(s)
==9675== at 0x805A7A5: swi_cartpol_sp (swephlib.c:354)
==9675== by 0x804E2E1: app_pos_rest (sweph.c:2376)
==9675== by 0x8050AD4: app_pos_etc_sun (sweph.c:3179)
==9675== by 0x8051AE1: main_planet (sweph.c:1259)
==9675== by 0x8054D1B: swecalc (sweph.c:675)
==9675== by 0x8056F26: swe_calc (sweph.c:288)
==9675== by 0x806196D: swe_rise_trans (swecl.c:2905)
==9675== by 0x8049AD0: listsplpanchaanga (monthpan.c:512)
==9675== by 0x804AC67: main (monthpan.c:148)
==9675==
==9675== Conditional jump or move depends on uninitialised value(s)
==9675== at 0x805A7C8: swi_cartpol_sp (swephlib.c:355)
==9675== by 0x804E2E1: app_pos_rest (sweph.c:2376)
==9675== by 0x8050AD4: app_pos_etc_sun (sweph.c:3179)
==9675== by 0x8051AE1: main_planet (sweph.c:1259)
==9675== by 0x8054D1B: swecalc (sweph.c:675)
==9675== by 0x8056F26: swe_calc (sweph.c:288)
==9675== by 0x806196D: swe_rise_trans (swecl.c:2905)
==9675== by 0x8049AD0: listsplpanchaanga (monthpan.c:512)
==9675== by 0x804AC67: main (monthpan.c:148)
==9675==
==9675== Conditional jump or move depends on uninitialised value(s)
==9675== at 0x805A7CE: swi_cartpol_sp (swephlib.c:355)
==9675== by 0x804E2E1: app_pos_rest (sweph.c:2376)
==9675== by 0x8050AD4: app_pos_etc_sun (sweph.c:3179)
==9675== by 0x8051AE1: main_planet (sweph.c:1259)
==9675== by 0x8054D1B: swecalc (sweph.c:675)
==9675== by 0x8056F26: swe_calc (sweph.c:288)
==9675== by 0x806196D: swe_rise_trans (swecl.c:2905)
==9675== by 0x8049AD0: listsplpanchaanga (monthpan.c:512)
==9675== by 0x804AC67: main (monthpan.c:148)
debug: vaasara = 1, graha = Soma
debug: vaasara = 2, graha = Mangala
debug: vaasara = 3, graha = Budha
debug: vaasara = 4, graha = Guru
debug: vaasara = 5, graha = Shukra
debug: vaasara = 6, graha = Shani
==9675==
==9675== Invalid read of size 1
==9675== at 0x4021FB8: strlen (in /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)
==9675== by 0x40A0807: vfprintf (in /lib/libc-2.4.so)
==9675== by 0x40A5C92: printf (in /lib/libc-2.4.so)
==9675== by 0x8049B7D: listsplpanchaanga (monthpan.c:593)
==9675== by 0x804AC67: main (monthpan.c:148)
==9675== Address 0x726956 is not stack'd, malloc'd or (recently) free'd
==9675==
==9675== Process terminating with default action of signal 11 (SIGSEGV)
==9675== Access not within mapped region at address 0x726956
==9675== at 0x4021FB8: strlen (in /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)
==9675== by 0x40A0807: vfprintf (in /lib/libc-2.4.so)
==9675== by 0x40A5C92: printf (in /lib/libc-2.4.so)
==9675== by 0x8049B7D: listsplpanchaanga (monthpan.c:593)
==9675== by 0x804AC67: main (monthpan.c:148)
debug: vaasara = 0, graha = ==9675==
==9675== ERROR SUMMARY: 22083 errors from 19 contexts (suppressed: 3 from 1)
==9675== malloc/free: in use at exit: 0 bytes in 0 blocks.
==9675== malloc/free: 0 allocs, 0 frees, 0 bytes allocated.
==9675== For counts of detected errors, rerun with: -v
==9675== All heap blocks were freed -- no leaks are possible.
Segmentation fault
samjnaa@chandas:~/bin/swisseph/panchaanga>
[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Curious segmentation fault - please help
2006-05-13 14:28 Curious segmentation fault - please help Shriramana Sharma
@ 2006-05-13 15:09 ` Steve Graegert
2006-05-13 16:27 ` Shriramana Sharma
0 siblings, 1 reply; 6+ messages in thread
From: Steve Graegert @ 2006-05-13 15:09 UTC (permalink / raw)
To: linux-c-programming
On 5/13/06, Shriramana Sharma <samjnaa@gmail.com> wrote:
> Attached: valgrind output; used electric fence too
> Attached: original source code (licence: Artistic Licence v2)
>
> I am getting a segmentation fault. I have compiled using electric fence, and
> used valgrind to debug. (Not got used to gdb yet.)
>
> For some reason, while I have initialized the array grahanaama[] (line 64 of
> monthpan.c), grahanaama[0] gives an error at line 593 [added for debugging].
> Similarly initialized array tithinaama does not give an error for accessing
> tithinaama[0].
Looks like the function 'listsplpanchaanga' tries to access the
'grahanaama' array's nth element with only n - 1 being present
('vaasara = 6' accesses the last, 7th, element), thus causing a
segfault. This is what valgrind means by an "Invalid read of size 1".
Make sure you do not read past the array by simply #defining a
constant like NUM_GRAHANAAMA and using an if-statement to check for
the correctness of 'vaasara', which is calculated dynamically on each
step in the loop. Maybe you can simply correct the error by accessing
'grahanaama' using 'vaasara - 1': grahanaama[vaasara - 1] if this is
what you wanted to achieve.
At least, this is my first guess. I have not yet fully grasped the
meaning of the code, due to difficulties in understanding the variable
and function names :-)
\Steve
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Curious segmentation fault - please help
2006-05-13 15:09 ` Steve Graegert
@ 2006-05-13 16:27 ` Shriramana Sharma
2006-05-13 17:20 ` Steve Graegert
0 siblings, 1 reply; 6+ messages in thread
From: Shriramana Sharma @ 2006-05-13 16:27 UTC (permalink / raw)
To: Linux C Programming List
[-- Attachment #1: Type: text/plain, Size: 2311 bytes --]
Saturday 13 May 2006 20:39 samaye, Steve Graegert alekhiit:
> Looks like the function 'listsplpanchaanga' tries to access the
> 'grahanaama' array's nth element with only n - 1 being present
> ('vaasara = 6' accesses the last, 7th, element),
Yep. But the array does contain 7 elements. Vide line 64 of monthpan.c:
char *grahanaama[] = {"Bhaanu", "Soma", "Mangala", "Budha", "Guru", "Shukra",
"Shani"};
[celestialbodyname[] = "Sun", "Moon", "Mars", "Mercury", "Jupiter", "Venus",
"Saturn" -- for weekday]
> thus causing a
> segfault.
... so how can a segfault be caused? As you see the valgrind-output,
debug: vaasara = 1, graha = Soma
debug: vaasara = 2, graha = Mangala
debug: vaasara = 3, graha = Budha
debug: vaasara = 4, graha = Guru
debug: vaasara = 5, graha = Shukra
debug: vaasara = 6, graha = Shani
vaasara[6] does give the correct output. The fault is seen *after* vaasara[6]
is read and written to stdout:
==9675== Invalid read of size 1
==9675== Address 0x726956 is not stack'd, malloc'd or (recently) free'd
==9675==
==9675== Process terminating with default action of signal 11 (SIGSEGV)
==9675== Access not within mapped region at address 0x726956
==9675== by 0x40A5C92: printf (in /lib/libc-2.4.so)
==9675== by 0x8049B7D: listsplpanchaanga (monthpan.c:593)
debug: vaasara = 0, graha = ==9675==
(Trimmed)
> step in the loop. Maybe you can simply correct the error by accessing
> 'grahanaama' using 'vaasara - 1': grahanaama[vaasara - 1] if this is
> what you wanted to achieve.
But then I would not get grahanaama[0] = "Surya" which is what I want to get.
Actually this program compiled and worked perfectly on GCC 4.02 with SUSE
10.0. (And also GCC 4.1 with SUSE 10.0 I think.) But since I upgraded to SUSE
10.1, I get this error. SUSE 10.1 has gcc 4.1 and glibc 2.4, [as I am sure
you as a fellow suser know] if that means anything...
> At least, this is my first guess. I have not yet fully grasped the
> meaning of the code, due to difficulties in understanding the variable
> and function names :-)
Sanskrit. It's an ancient-Indian-astronomy application.
--
Tux #395953 resides at http://samvit.org
playing with KDE 3.51 on SUSE Linux 10.1
$ date [] CCE +2006-05-13 W19-6 UTC+0530
[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Curious segmentation fault - please help
2006-05-13 16:27 ` Shriramana Sharma
@ 2006-05-13 17:20 ` Steve Graegert
2006-05-13 18:58 ` Shriramana Sharma
0 siblings, 1 reply; 6+ messages in thread
From: Steve Graegert @ 2006-05-13 17:20 UTC (permalink / raw)
To: linux-c-programming
On 5/13/06, Shriramana Sharma <samjnaa@gmail.com> wrote:
> Saturday 13 May 2006 20:39 samaye, Steve Graegert alekhiit:
>
> > Looks like the function 'listsplpanchaanga' tries to access the
> > 'grahanaama' array's nth element with only n - 1 being present
> > ('vaasara = 6' accesses the last, 7th, element),
>
> Yep. But the array does contain 7 elements. Vide line 64 of monthpan.c:
Sure, but valgrind's output shows, that the program tries to read the
first character of the nth element: "Invalid read of size 1" (with
char of size 1).
Furthermore it shows that the error occurs in the same loop in function:
/* called from within main */
==9675== by 0x8049AD0: listsplpanchaanga (monthpan.c:512)
==9675== by 0x804AC67: main (monthpan.c:148)
[debug output here and still within listsplpanchaanga()]
==9675== Invalid read of size 1
==9675== at 0x4021FB8: strlen (in
/usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)
==9675== by 0x40A0807: vfprintf (in /lib/libc-2.4.so)
==9675== by 0x40A5C92: printf (in /lib/libc-2.4.so)
==9675== by 0x8049B7D: listsplpanchaanga (monthpan.c:593)
==9675== by 0x804AC67: main (monthpan.c:148)
==9675== Address 0x726956 is not stack'd, malloc'd or (recently) free'
This reads as: main() calls listsplpanchaanga() calls printf() calls
vfprintf() calls strlen() where the read failed. In line 593 printf()
tries to read a byte which is neither on the stack, the heap nor has
been free()'d.
[snip]
> vaasara[6] does give the correct output. The fault is seen *after* vaasara[6]
> is read and written to stdout:
which accesses the last element correctly. Nevertheless, the function
tries to read one more character causing a segfault. Please don't
misinterpret valgind's output: we are still in listsplpanchaanga().
> > step in the loop. Maybe you can simply correct the error by accessing
> > 'grahanaama' using 'vaasara - 1': grahanaama[vaasara - 1] if this is
> > what you wanted to achieve.
>
> But then I would not get grahanaama[0] = "Surya" which is what I want to get.
> Actually this program compiled and worked perfectly on GCC 4.02 with SUSE
> 10.0. (And also GCC 4.1 with SUSE 10.0 I think.) But since I upgraded to SUSE
> 10.1, I get this error. SUSE 10.1 has gcc 4.1 and glibc 2.4, [as I am sure
> you as a fellow suser know] if that means anything...
Hm, don't know what could have changed. I am not a SuSEr anymore;
returned to Debian and NetBSD.
> > At least, this is my first guess. I have not yet fully grasped the
> > meaning of the code, due to difficulties in understanding the variable
> > and function names :-)
>
> Sanskrit. It's an ancient-Indian-astronomy application.
Hey cool! My girlfriend is a Buddhist, she may indeed have some
knowledge of Sanskrit, but I have serious doubts that she is willing
to read the code :-)
\Steve
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Curious segmentation fault - please help
2006-05-13 17:20 ` Steve Graegert
@ 2006-05-13 18:58 ` Shriramana Sharma
2006-05-13 21:04 ` Steve Graegert
0 siblings, 1 reply; 6+ messages in thread
From: Shriramana Sharma @ 2006-05-13 18:58 UTC (permalink / raw)
To: Linux C Programming List
[-- Attachment #1: Type: text/plain, Size: 854 bytes --]
Saturday 13 May 2006 22:50 samaye, Steve Graegert alekhiit:
> > vaasara[6] does give the correct output. The fault is seen *after*
> > vaasara[6] is read and written to stdout:
>
> which accesses the last element correctly. Nevertheless, the function
> tries to read one more character causing a segfault. Please don't
> misinterpret valgind's output: we are still in listsplpanchaanga().
Of course. But all I am doing is using the standard fprintf function. Is it
possible that the behaviour of this function would have changed from glibc
2.36 to glibc 2.4?
> Hm, don't know what could have changed. I am not a SuSEr anymore;
> returned to Debian and NetBSD.
So can't see you anymore on SLE?
--
Tux #395953 resides at http://samvit.org
playing with KDE 3.51 on SUSE Linux 10.1
$ date [] CCE +2006-05-14 W19-7 UTC+0530
[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Curious segmentation fault - please help
2006-05-13 18:58 ` Shriramana Sharma
@ 2006-05-13 21:04 ` Steve Graegert
0 siblings, 0 replies; 6+ messages in thread
From: Steve Graegert @ 2006-05-13 21:04 UTC (permalink / raw)
To: linux-c-programming
On 5/13/06, Shriramana Sharma <samjnaa@gmail.com> wrote:
> Saturday 13 May 2006 22:50 samaye, Steve Graegert alekhiit:
>
> > > vaasara[6] does give the correct output. The fault is seen *after*
> > > vaasara[6] is read and written to stdout:
> >
> > which accesses the last element correctly. Nevertheless, the function
> > tries to read one more character causing a segfault. Please don't
> > misinterpret valgind's output: we are still in listsplpanchaanga().
>
> Of course. But all I am doing is using the standard fprintf function. Is it
> possible that the behaviour of this function would have changed from glibc
> 2.36 to glibc 2.4?
OK, now I got the code. You're right, it's not as simple as it seemed
at first glance. Just oversaw some lines of the valgrind output,
showing that accessing element 0 (zero) is indeed failing all the
time. Sorry, just did not get it at first.
Let's try another thing before filing a bug or something: instruct
valgrind to attach to a debugger when the error occurs:
% valgrind --tool=memcheck --db-attach=yes -v ./monthpan
when entered the debugger call
(gdb) where
... /* stack trace */
(gdb) whatis grahanaama
... /* prints type and size of expression */
(gdb) print grahanaama[0]
... /* should display contents of expression; may result in an error*/
Try to capture the output and mail it to me privately. You can also
send me the complete program and I'll have a look at it.
If all goes well here, you may have uncovered some weird behaviour
which may indeed be a bug either in glibc or gcc.
> > Hm, don't know what could have changed. I am not a SuSEr anymore;
> > returned to Debian and NetBSD.
>
> So can't see you anymore on SLE?
Yes, I simply don't have the time to follow SLE discussions anymore.
\Steve
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2006-05-13 21:04 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-05-13 14:28 Curious segmentation fault - please help Shriramana Sharma
2006-05-13 15:09 ` Steve Graegert
2006-05-13 16:27 ` Shriramana Sharma
2006-05-13 17:20 ` Steve Graegert
2006-05-13 18:58 ` Shriramana Sharma
2006-05-13 21:04 ` Steve Graegert
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).