[問題] C malloc與free (已解決 謝謝大家)
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
Dev C
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
問題(Question):
我的程式有一段loop
loop會call一個function去做 malloc的動作
因為是link list 接下來還要對link list做動作 所以在同一個function裡面沒有free
之後另外寫一個function來free之前的malloc但是感覺free不完全
因為看自己電腦的記憶體還是一直被吃掉的><
然後code就跑不動了
餵入的資料(Input):
預期的正確結果(Expected Output):
可以跑完整組數據 152064組
錯誤結果(Wrong Output):
跑到中後段 因為記憶體不足而停止
程式碼(Code):(請善用置底文網頁, 記得排版)
code聽了板友建議稍微改了一下 但問題沒有解決><
typedef struct _treenode treenode;
struct _treenode
{
int freq;
unsigned char data;//存被encode的值 if not 存256當作node
treenode *left, *right;
int flag;
};
void main()
treenode *root;
while(infile.get(temp_ch))
{
root = build_huffman_2(freq2, ch1, code, codes);
ch2= (unsigned char)temp_ch;
for (s=codes[ch2]; *s; s++) bitout (outcodeword, *s, &count);
freq2[ch1][ch2]++;
ch1 = ch2;
number_byte ++;
printf("total_byte get = %d\n",number_byte);
}
///////////////////////////////////////////////////////////////
void free_2 (treenode *r, int size)
{
if ((r->left == NULL) && (r->right == NULL))
{
free(r);
}
else
{
free_2(r->left, 1);
free_2(r->right,1);
free(r);
}
}
treenode *build_huffman_2 (int**freqs, int index, char code[], char*codes[])
{
int i, n;
treenode *x, *y, *z, *r;
PQ p;
int size;
for (i=0; i< MAX_NUM; i++)
{
x = (treenode*)malloc (sizeof (treenode));
x->left = NULL;
x->right = NULL;
x->freq = freqs[index][i];
x->data = (unsigned char) i;
x->flag = 1;
insert (&p, x);
}
n = p.heap_size-1;
for (i=0; i< n; i++)
{
z = (treenode*)malloc (sizeof (treenode));
x = extract_min (&p);//最小的兩個 x y
y = extract_min (&p);
z->left = x;
z->right = y;
z->flag = 0;
z->freq = x->freq + y->freq;
insert (&p, z);
//free(z);
}
size = p.heap_size;
r = extract_min (&p);
traverse_2 (r, 0, code, codes, index);
free_2(r, size);//改在此free
if ((r->left == NULL) && (r->right == NULL)){ cout<<"clear"<<endl;}
//發現這個條件不會進來...不知道是不是這個的問題
for(i = 0; i<size; i++)
free(p.A[i]);
return r;
}
補充說明(Supplement):
因為struct裡面有兩個pointer left和right
感覺是可以循線下去free但好像不是這樣子 想請大家幫我看看是哪一個地方沒考慮清楚
謝謝大家><
後來發現是自己另外一個function裡面會生出一組string
而有pointer造成記憶體不足
改了之後就沒有這個問題了
謝謝版主和大家的幫忙>"<
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.202.30
※ 編輯: s77727r 來自: 140.113.202.30 (04/16 11:33)
推
04/16 11:58, , 1F
04/16 11:58, 1F
→
04/16 12:12, , 2F
04/16 12:12, 2F
→
04/16 12:13, , 3F
04/16 12:13, 3F
→
04/16 12:59, , 4F
04/16 12:59, 4F
→
04/16 14:14, , 5F
04/16 14:14, 5F
→
04/16 14:15, , 6F
04/16 14:15, 6F
→
04/16 14:26, , 7F
04/16 14:26, 7F
→
04/16 14:27, , 8F
04/16 14:27, 8F
→
04/16 14:30, , 9F
04/16 14:30, 9F
→
04/16 14:43, , 10F
04/16 14:43, 10F
→
04/16 14:43, , 11F
04/16 14:43, 11F
※ 編輯: s77727r 來自: 140.113.202.30 (04/16 17:04)
※ 編輯: s77727r 來自: 140.113.202.30 (04/16 17:06)
→
04/16 17:11, , 12F
04/16 17:11, 12F
→
04/16 17:12, , 13F
04/16 17:12, 13F
→
04/16 17:12, , 14F
04/16 17:12, 14F
→
04/16 17:12, , 15F
04/16 17:12, 15F
→
04/16 17:15, , 16F
04/16 17:15, 16F
→
04/16 17:16, , 17F
04/16 17:16, 17F
→
04/16 17:16, , 18F
04/16 17:16, 18F
→
04/16 17:24, , 19F
04/16 17:24, 19F
→
04/16 17:31, , 20F
04/16 17:31, 20F
→
04/16 17:32, , 21F
04/16 17:32, 21F
→
04/16 17:32, , 22F
04/16 17:32, 22F
推
04/16 17:34, , 23F
04/16 17:34, 23F
→
04/16 17:41, , 24F
04/16 17:41, 24F
→
04/16 17:42, , 25F
04/16 17:42, 25F
→
04/16 17:43, , 26F
04/16 17:43, 26F
→
04/16 18:02, , 27F
04/16 18:02, 27F
→
04/16 18:02, , 28F
04/16 18:02, 28F
→
04/16 18:03, , 29F
04/16 18:03, 29F
→
04/16 18:17, , 30F
04/16 18:17, 30F
→
04/16 18:47, , 31F
04/16 18:47, 31F
→
04/16 19:06, , 32F
04/16 19:06, 32F
→
04/16 19:23, , 33F
04/16 19:23, 33F
→
04/16 19:24, , 34F
04/16 19:24, 34F
※ 編輯: s77727r 來自: 140.113.202.30 (04/17 01:08)
※ 編輯: s77727r 來自: 140.113.202.30 (04/17 01:10)