Mail Archives: djgpp/2003/01/27/22:17:22
oops,
I found the mistake: strings
1. a string has 2 parts: the text and the null terminaror character '\x0'
2. malloc( strlen( str ) ) is too bad because you need 1 byte extra to
'\x0' character
3. solution: malloc( strlen( str ) + 1 )
sorry everybody :-$ (maybe it helped someone else)
thanks to Hans-Bernhard Broeker and Tim
>I had a simular problem, it turned out the I was freeing an unallocated
>pointer! Although I was testing that the pointer was !NULL before issuing
>free(), I was assuming that free() would nulify the pointer and it does
>not - The trick is to reassign NULL to the pointer again after the free().
>That way if you attempt to issue free() again before reallocating the
>pointer you'll get away with it :-) Something like this....
>
>//Defining the pointer
>char *mypointer = NULL;
>...
>//Allocating the memory
> if(mypointer = = NULL)
> mypointer = (char *) malloc(size);
>...
>//Using the memory
> if (mypointer != NULL)
> memcpy(mypointer,something,size);...
>//Freeing the memory
> if (mypointer != NULL)
> {
> free (mypointer);
> mypointer = NULL; //<=== THIS IS THE MAGIC LINE....
> }
>
>I now always check for NULL before a malloc(), check for !NULL before using
>a pointer or issuing a free() and assign NULL to the pointer again after the
>free() - It solved all my wierd dynamic allocation crashes in one go!!
>
>
>Regards
>
>
>Tim
>
>
>"fru" <elfrucool AT tutopia DOT com> wrote in message
>news:3E3560E0 DOT 3070200 AT tutopia DOT com...
>
>
>>I have runtime problems with malloc and free functions, simple:
>>when I use malloc/free several times, there is a moment when my
>>program crashes and display a message: page segmentation fault at .....
>>
>>when I compile the same program with borland c++ 3.0 (DOS), there
>>is no problem, and there is no problem with cygwin
>>
>>I'm using the latest version of djgpp (binaries) but I had the problem
>>
>>
>with
>
>
>>a version from 1998 too
>>
>>¿who wants the source to check it? It's simple and short to analize (the
>>bug part)
>>but (I think) too large to post in the mailing list
>>
>> source: '.c' files '.h' files and Makefile
>>
>>comments: <elfrucool AT tutopia DOT com> (please add in the subject something
>>like: DJGPP's list)
>>
>>***Note 1: Sorry about my English
>>***Note 2: Spanish speackers: pueden comentarlo en español
>>
>>
>>
>>
>
>
>
>fru <elfrucool AT tutopia DOT com> wrote:
>
>
>>> I have runtime problems with malloc and free functions, simple:
>>> when I use malloc/free several times, there is a moment when my
>>> program crashes and display a message: page segmentation fault at .....
>>
>>
>
>This almost certainly means you did something wrong with the pointers
>returned by one or more of your malloc() calls. See the DJGPP FAQ,
>issue #9.2: Programs that crash in `malloc' or `free'.
>
>I definitely recommend YAMD for findin this kind of bug. Give it a try.
> -- Hans-Bernhard Broeker (broeker AT physik DOT rwth-aachen DOT de) Even if all
> the snow were burnt, ashes would remain.
>
>
>
>
- Raw text -