Message-ID: <20000408155631.7966.qmail@hotmail.com> X-Originating-IP: [195.100.144.172] From: "Fredrik Olsson" To: dj AT delorie DOT com Subject: bug? Date: Sat, 08 Apr 2000 08:56:31 PDT Mime-Version: 1.0 Content-Type: text/plain; format=flowed Reply-To: djgpp AT delorie DOT com Hi there all djgpp'ers ! I have 2 problems with my program, and I've spent more than 30 hours debugging it. Still I can't find anything wrong in my code.. so I'm hoping for some help from you... The only thing I can think of after debugging it is somekind of lack of base memory (the first 640k, don't really know what its called), I think that's where local variables are stored? So that somehow the function called uses the same memory as the previous function, and overwrites "int i". But if this is so, I dont have a clue on what to do. I've enlarged the minimum stack space for cc1.exe and cc1plus.exe to 512k resp. 1024k - using stubedit, but that didn't make it.. Thank you for taking your time. ================================================== Problem 1: When u_RemoveFromSolid (int id) is called from u_AddToSpawnList (int id), the variable "int i" is changed. - I have debugged the code and I found that "int i" is changed when calling u_RemoveFromSolid() from u_AddToSpawnList(), on that exact line. Cause is now narrowed down to something in u_RemoveFromSolid(); Testing: 1. Added return; in begining of u_RemoveFromSolid() and "int i" was not changed. 2. Locked "int i" in u_AddToSpawnlist() and "int i" was not changed. 3. Included "units.h" for T_SOLID flag and "int i" changed from 47k to 225 after u_RemoveFromSolid (). (Stupid miss of me, T_SOLID const flag was not set before) 4. including "sv_u.h" to all files calling functions within "sv_u.c" -unsuccessful ("int i" is still changed) Probable causes: Something is overflowing - probably in u_RemoveFromPhysics()? Some kind of segmentation fault when u_RemoveFromSolid() were run from u_AddToSpawnList()? Something in u_RemoveFromSolid() was poking in memory and got to "int i"? Here is the code: //***************************************************************************************** // U_REMOVEFROMSOLID void u_RemoveFromSolid (int id) { int ai=0, removed; for (ai=0;aitables = unit[id]->tables & ~T_SOLID; removed = ai; // resort list for (i=MAXUNITS-1;i>removed;i--) if (solid[i] != 0) { solid[removed] = solid[i]; solid[i] = 0; return; } return; } // this should not happen Sys_Error ("sv_u.c; u_RemoveFromSolid(); - unit[%d]->type = %d Requested unit not in list!", id, unit[id]->type); } //***************************************************************************************** // U_ADDTOSPAWNLIST void u_AddToSpawnList (int id) { int i; //LOCK_VARIABLE (i); // sort in spawnitem in cue for (i=0; iwait > unit[id]->wait || i == spawn_list_count) { // remove unit from tables if any if (unit[id]->tables & T_SOLID){ // at this time i == 0 // after the next line is run "int i" is changed. u_RemoveFromSolid (id); // at this time i == 427272 } if (unit[id]->tables & T_PHYSICS){ u_RemoveFromPhysics (id); } // make room for new spawnitem if (spawn_list_count > 0) memcpy (spawn_list[i+1], spawn_list[i], sizeof(struct u) * (spawn_list_count - i)); // move spawnitem to list memcpy (unit[0], unit[id], sizeof(struct u)); free_unit (id); spawn_list_count ++; return; } Sys_Error ("sv_u.c; u_AddToSpawnList(); - Could not add unit %d to spawn_list! (type = %d)", id, unit[id]->type); } ================================================== 2: --Could not debug some variables, "not availuable" -still they can hold values: int a[10], b; b = 22; a[0] = b; (when evaluating "int a" it is 22) Thanks for your time! /Fredrik Olsson, Fredrik0725 AT hotmail DOT com ______________________________________________________ Get Your Private, Free Email at http://www.hotmail.com