[問題] 關於struct的free()

看板C_and_CPP (C/C++)作者時間16年前 (2009/04/26 15:05), 編輯推噓0(0011)
留言11則, 2人參與, 最新討論串1/1
最近在練習用動態配置記憶體的東西,不過配合struct使  用的話好像會怪怪的..  底下是我寫的程式,在struct中使用了兩個char*,所以就  分別配置了兩個動態記憶體給它們用,不過在最後用完後  的free部份,不知道為什都會當掉,如果只free一個就不  會? 請問一下,這樣用是不是有錯呢? #include <iostream.h> #include <stdlib.h> struct per { char *name; char *id; }; void main() { struct per p; p.id=(char *)malloc(sizeof(char)); p.name=(char *)malloc(sizeof(char)); cin >> p.id >> p.name; cout << p.id << " "<<p.name << endl; free(p.id); free(p.name); } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.133.117.77

04/26 15:26, , 1F
剛剛又試了一下,發現只要有用到free就會當掉..XD
04/26 15:26, 1F

04/26 15:26, , 2F
不是只要有用malloc就要free嗎??@@
04/26 15:26, 2F

04/26 15:27, , 3F
請教你的輸入和輸出各為何?
04/26 15:27, 3F

04/26 15:28, , 4F
就隨便輸入幾個英文字這樣
04/26 15:28, 4F

04/26 15:31, , 5F
知道原因了..因為malloc的字串型態宣告錯誤..囧
04/26 15:31, 5F

04/26 15:31, , 6F
那是幾個? 這兩個指標都只能各輸入1個
04/26 15:31, 6F

04/26 15:31, , 7F
要宣告成(char *)malloc(sizeof(char [10]))這樣才行
04/26 15:31, 7F

04/26 15:32, , 8F
剛剛有試只輸入一個英文字好像也不行
04/26 15:32, 8F

04/26 15:36, , 9F
瞭解了..原來是因為字串變數最後還會加上一個\0,所以用
04/26 15:36, 9F

04/26 15:37, , 10F
sizeof(char)的話,大小只有一個,就只能存\0
04/26 15:37, 10F

04/26 15:37, , 11F
感謝bleed1979大提醒我字數的問題~:)
04/26 15:37, 11F
文章代碼(AID): #19z0UUCR (C_and_CPP)
文章代碼(AID): #19z0UUCR (C_and_CPP)