作者 主題: malloc and free  (閱讀 3436 次)

0 會員 與 1 訪客 正在閱讀本文。

casa

  • 懷疑的國中生
  • **
  • 文章數: 41
    • 檢視個人資料
malloc and free
« 於: 2009-11-04 13:51 »
想詢問一下 malloc 程 free 的習慣問題...
我是有先宣告一個 struct
ex.
代碼: [選擇]
typedef struct VSF
{
  unsigned char *field;
  unsigned int length;
  unsigned int *value;
  struct VSF *next;
} VSF;

原則上,要使用時,我們需要先 malloc 一下...

代碼: [選擇]
vsf_head = (VSF *) malloc(sizeof(VSF));
vsf_head->next = NULL;

以及

代碼: [選擇]
vsf1->value = (int *) malloc (sizeof (int) * vsf1->length)

想請問的是... 在 free (vsf_head) 之前
是否要先 free (vsf1->value) ?
但是,如果要 free (vsf1->value) 那就得要,每個節點都去 free 一次

PS. 我知道程式結束,應該一切都結束了
只是想瞭解一下,什麼叫好習慣....

謝謝各位學長!




casa

  • 懷疑的國中生
  • **
  • 文章數: 41
    • 檢視個人資料
回覆: malloc and free
« 回覆 #1 於: 2009-11-09 02:06 »
不好意思...
想再請教一下...
代碼: [選擇]
int *p1;

vsf1->value = (int *) malloc (sizeof (int) * vsf1->length)

p1 = vsf1->value;
for (i = 0; i < vsf1->length; i++)
{
  *p1 = 0;
   p1++;
}

上面這一段有問題嗎?
當我想去 initial 他
似乎程式會出問題... (DOS prompt 當掉)

我知道用矩陣最方便,但是,因為 length 不固定
不想用個大的 array 來存

還望各位學長指導一下,謝謝!


damody

  • 可愛的小學生
  • *
  • 文章數: 1
    • 檢視個人資料
回覆: malloc and free
« 回覆 #2 於: 2009-11-11 04:48 »
個人在mingw下沒問題,應該不是這個問題。

elleryq

  • 區域板主
  • 鑽研的研究生
  • *****
  • 文章數: 908
  • 性別: 男
    • 檢視個人資料
    • Thinking more...
回覆: malloc and free
« 回覆 #3 於: 2009-11-11 10:46 »
引用
想請問的是... 在 free (vsf_head) 之前
是否要先 free (vsf1->value) ?
但是,如果要 free (vsf1->value) 那就得要,每個節點都去 free 一次
對,的確是要這樣沒錯。

引用
當我想去 initial 他
似乎程式會出問題... (DOS prompt 當掉)
程式看起來沒有錯誤
當掉的訊息是什麼??
length 是多少呢??
Plan your work, then work your plan.
我的首頁:http://blog.elleryq.idv.tw
351899by http://counter.li.org