From: Keetnet AT wilmington DOT net (Keet / Foxbird) Subject: malloc() question.. 14 Nov 1997 04:42:58 -0800 Message-ID: <3.0.32.19971114071055.007a4100.cygnus.gnu-win32@wilmington.net> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" To: gnu-win32 AT cygnus DOT com I've recently made some additions and changes to a program of mine, which filters out certain sets of characters (IE: ^01^ ) and turns them into ANSI escape sequences for color. Needless to say it's for a telnet server type application. The only problem is, that it seems to crash at a certain spot every time (this spot can vary depending on the settings). I've gone through and looked at debug code, and scanned over all the source and found the line that caused the problem. The baffling thing about this line is that it's the line that calls 'malloc'? It takes the length of a string, adds a few to it, mallocs the memory, and then assigns a string into it. This line is called many, many times before this, and works fine each time, but it seems to trip up after a certain number of calls. I've asked a few people what to do, and some told me it was some kinda of memory pointer problem, and that I should add 16 to all the malloc calls I make. Did that, and it progresses quite a bit farther but it then it drops out on another malloc call. So now I'm lost as to what to do. Can anyone offer any help? - Greg Neujahr keetnet AT wilmington DOT net /* Snippet of code that gets called too many times to count. */ char *color_sub(char *qstring) { char *holdstr; // Temporary array to hold the results char escape[2], subval[6]; // escape=escape character; subval=value to sub escape[0]=27; // Fisrt character=escape escape[1]='\0'; // Make it a valid string holdstr = (char *) malloc( strlen(qstring)+17 ); /* Allocate size for result. This line is normally +1 not +17 */ strcpy(subval,escape); // Copy the escape string into the substitute string strcat(subval,"[30m"); // Tack on ANSI sub value holdstr = subst(qstring, subval, "%%00%%"); // Substitue ansi string qstring = (char *) malloc(strlen(holdstr)+16); // Allocate space for result qstring = holdstr; // Assign the result to the original string /* More code that looks almost exactly the same follows. subst() is a section that just substitutes out the %%??%% codes and turns them into Ansi escapes. Yes, the string has a positive length (and is not 0). */ return qstring; } // EOF So, is there anyone out there who can help? - For help on using this list (especially unsubscribing), send a message to "gnu-win32-request AT cygnus DOT com" with one line of text: "help".