From: "Lars O. Hansen" Newsgroups: comp.os.msdos.djgpp Subject: Re: problem with malloc and free Date: Sat, 14 Dec 2002 11:38:33 +0100 Organization: 1&1 Internet AG Lines: 135 Message-ID: References: NNTP-Posting-Host: p5083867a.dip0.t-ipconnect.de X-Trace: news.online.de 1039862311 24814 80.131.134.122 (14 Dec 2002 10:38:31 GMT) X-Complaints-To: abuse AT online DOT de NNTP-Posting-Date: 14 Dec 2002 10:38:31 GMT X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 6.00.2800.1106 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1106 To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Reply-To: djgpp AT delorie DOT com Still stripped down, but this always crashes when compiled with gcc -pedantic -Wall is.c -lalleg C:\Programme\djgpp\projects>a Exiting due to signal SIGSEGV General Protection Fault at eip=00003180 eax=00000000 ebx=000084f9 ecx=00000000 edx=76202000 esi=00000054 edi=000656c4 ebp=000e5668 esp=000e5630 program=C:\PROGRA~1\DJGPP\PROJECTS\A.EXE cs: sel=00a7 base=84f99000 limit=000effff ds: sel=00af base=84f99000 limit=000effff es: sel=00af base=84f99000 limit=000effff fs: sel=0087 base=000111c0 limit=0000ffff gs: sel=00c7 base=00000000 limit=0010ffff ss: sel=00af base=84f99000 limit=000effff App stack: [000e56c4..000656c4] Exceptn stack: [0006561c..000636dc] Call frame traceback EIPs: 0x00003180 0x000017b1 0x0000184a 0x000015f5 0x00040af8 #include "stdlib.h" #define arraysize 360 #define stype int #define rtype float #define trigtype float #define id 1024 #define PHI 1.0 #define statusx 10 #define statusy 440 stype array_size=arraysize-1; rtype *cm; trigtype *cxphi; trigtype *sxphi; rtype *a; trigtype *b; rtype *le; trigtype *an; stype *ak,*ek; trigtype phi=PHI; int somecolor0,somecolor1,somecolor2,textforegroundcolor,BACKGROUND_COLOR; char status_string[]=" "; void setupall(void); void init_arrays(void); void freeall(void); void cls(void); int main() { setupall(); freeall(); exit(0); } void cls(void) { show_mouse(NULL); clear_to_color(0,BACKGROUND_COLOR); status_string[sprintf(status_string+19,"%.1f",phi)+19]=32; textout(0,0,status_string,statusx,statusy,textforegroundcolor); } void init_arrays(void) { int i=array_size-1; cm=malloc(3*sizeof(rtype)*array_size); /* ! we allocate #of needed times memory */ cxphi=malloc(4*sizeof(trigtype)*array_size); ak=malloc(2*sizeof(stype)*array_size); a=cm+sizeof(rtype)*array_size; /* then we adjust the pointers ! */ le=a+sizeof(rtype)*array_size; sxphi=cxphi+sizeof(trigtype)*array_size; /* Please adjust the #times and add */ b=sxphi+sizeof(trigtype)*array_size; /* assignments here appropriately ! */ an=b+sizeof(trigtype)*array_size; ek=ak+sizeof(stype)*array_size; if(cm==NULL||cxphi==NULL||ak==NULL) /* so we also have to check less! adjust ! */ { printf("nomemstring"); exit(0); } do { cm[sizeof(rtype)*i]=id; } while(i--); cls(); } void freeall(void) { if(cm==0||cxphi==0||ak==0) /* so we also have to check less! adjust ! */ { printf("0?"); while(!kbhit()); exit(0); } free(cm); free(cxphi); free(ak); } void setupall(void) { atexit(freeall); init_arrays(); } I am looking myself for the error, but perhaps someone else is quicker; it's really bothering me. Lars