X-Authentication-Warning: delorie.com: mail set sender to djgpp-bounces using -f From: =?iso-8859-15?Q?Rafael_Garc=EDa?= Newsgroups: comp.os.msdos.djgpp Subject: strange comparison error Date: Mon, 22 Mar 2004 17:54:51 +0100 Organization: Telefonica Data Espagna Lines: 55 Message-ID: NNTP-Posting-Host: 100.red-80-34-252.pooles.rima-tde.net Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-15; format=flowed X-Trace: nsnmrro2-gest.nuria.telefonica-data.net 1079974651 8333 80.34.252.100 (22 Mar 2004 16:57:31 GMT) X-Complaints-To: usenet AT nsnmrro2-gest DOT nuria DOT telefonica-data DOT net NNTP-Posting-Date: Mon, 22 Mar 2004 16:57:31 +0000 (UTC) User-Agent: Opera7.11/Win32 M2 build 2887 To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Reply-To: djgpp AT delorie DOT com I have got an error message today that I cannot reproduce in my working machine. I don't understand what could cause it but perhaps some of you can give me an idea. I have something like this: -------------------------------------------------------- #define MAXFIELDS 5000 ... t_field *pcampo,*reg; int ncampo,relativo; ... pcampo=reg+ncampo+relativo*nc; // for example ... if (pcampo>reg+MAXFIELDS) { // intercept huge (bad) values printf("Wrong field number: %d",(int)(pcampo-reg)); return NULL; } do something with *pcampo --------------------------------------------------------- Well, this is not complete but that is not the point because it doesn't fail now. Nor it failed executing from RHIDE, when I tried to debug it with a breakpoint. It only failed in the morning on a machine to which I cannot get now. The problem is at the 'if'. It gave "Wrong field number: 14" but I can't understand how can it be 14 pcampo-reg and go into de "if (pcampo>reg+5000) ". I did solve it changing to "if (pcampo-reg>MAXFIELDS)", but cannot understand de difference. Perhaps that change didn't really solve it, but the mere recompilation corrected something. I don't think so. Could you imagine something can affect this pointer arithmetic? This same code is working regularly on other machines running many million times a day. Thank you. If you think the definition of 't_field' could be important, here it is (without translation). typedef struct { char *nombre; int tam; char *def; int vdesp; int hdesp; char *buf; unsigned adoptamoneda:1; #ifndef NOCACHEATR BOOL sincacheatr; int cacheatrlisto; char *cacheatributos[NATRIBUTOSCACHEABLES]; #endif } t_campo; NOCACHEATR is undefined NATRIBUTOSCACHEABLES is something like 15 -- Using M2, Opera's revolutionary e-mail client: http://www.opera.com/m2/