c - Cannot free data of a buffer after it was reallocated inside recursive function. What can be the reason? -
So I have to face a problem - when I have data that is greater than the initial size of my buffer And I recolor inside the recursive function, I get an error to free its buffer
* error for malloc: *** object 0x100106da0: pointer is being freed *
This code is:
zero recPrint (FILE * file, char * buffer, int realBufferSize, int buffer Car, char * freeCh, NodePtr * temp) {// some code here ... int * intArr = temp - & gt; UsedIndices; Int i = 0; For {i = 0; i & lt; 36; i ++} {if (intArr [i] == 1) {if (i> 9) {* freeCh = i - 10 + 'a'; } And {* freeCh = I + '0'; } RealBufferSize ++; If (realBufferSize> buffer size) {buffer = reel (buffer, (buffer size + 100) * size (four)); // & lt; & Lt; - REALLOC buffer size here = + 100; } FreeCh ++; RecPrint (File, Buffer, Actual Buffer Size, Buffer Size, Free Chaw, and Temporary -> Kids [i]); // Now we need to remove all extra characters until the next turn freeCh--; * Freech = '\ 0'; }}} Void printTrie (file * file, char * initialPath) {initPath = initialPath; If (root.isParent == 0) return; Four * buffer; Char * freeCh; Int * intArr = root.usedIndices; Int buffer size = 10; Int realBufferSize = 1000; Int i = 0; For (i = 0; i & lt; 36; i ++) {buffer = coloc (1001, size (four)); FreeCh = Buffer; If (inters [i] == 1) {if (i>; 9) {* free CH = i - 10 + 'a'; } And {* freeCh = I + '0'; } FreeCh ++; RealBufferSize ++; RecPrint (file, buffer, realbuffer size, buffer size, free-core, and root child [i]); Free (buffer); // & lt; & Lt; --- Receiving error here}}}
The comment explains the problem with @WozCraig Here are the recommended fixes.
- Return
reallock
ad buffer fromrecPrint
. Li> -
char * recPrint (FILE * file, char * buffer, Inc actual buffers, int buffer size, four * Free cha, nodeprint * temp) {.... // where you recurse ... buffer = recPrint (file, buffer, actual buffer size, buffer size, free cha, and temporary -> children [i]); // and always * turn on * the buffer pointer back to the caller. Return buffer; }
printTrie
in:
buffer = recPrint (file, buffer, actual buffer size, buffer size, free , And root children [i]); Free (buffer);
Comments
Post a Comment