[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
C program segfaults when run, not under GDB
- To: linux-il(at-nospam)linux.org.il
- Subject: C program segfaults when run, not under GDB
- From: Eugene Romm <sf_milesteg(at-nospam)bezeqint.net>
- Date: Sun, 25 Nov 2001 11:36:57 +0200
- Delivered-To: linux.org.il-linux-il@linux.org.il
- Reply-To: milesteg(at-nospam)surfree.net.il
- Sender: linux-il-bounce(at-nospam)cs.huji.ac.il
- User-Agent: Mozilla/5.0 (X11; U; Linux i586; en-US; rv:0.9.6) Gecko/20011124
Hello.
I've written a procedure that's supposed to remove all occurances of
string2 from string1 (parameters).
For reasons I do not understand, the program compiles but segfaults when
run from the command prompt, but silently executes without a warning
when run under GDB. Attached is the program. Segfault occurs on line 29,
as far as I can tell.
#include <stdio.h>
#define yes 1
#define no 0
main() {
squeezechar2("abcdeFghijklmnopqrstuvwxyZ","deF");
}
squeezechar2(s1,s2)
char s1[];
char s2[];
{
int c1,c2;
int s2length;
int factor=0;
int moo;
int matches=no;
for (s2length=0;s2[s2length]!='\0';s2length++); // find out s2length
for (c1=c2=0;s1[c1] != '\0' ; c1++) { // loop to end of string
if (s1[c1]==s2[c2]) { // if first char matches
for (matches=yes,moo=0;(moo<s2length) && (s1[c1+moo]==s2[moo]);moo++);
if (moo!=s2length) matches=no;
else
factor+=s2length; // factor changes if there's a match
}
// printf("%c",s1[c1]);
if (factor!=0) s1[c1]=s1[c1+factor];
}
}