比方說,我有這個struct
在ANSI C:ANSI C在創建結構時是否必須使用malloc()?
typedef struct _point
{
float x;
float y;
} Point;
而這個函數來創建這個struct
:
Point createpoint(float x, float y)
{
Point p;
p.x = x;
p.y = y;
return p;
}
這讓我創建這個功能即struct
:
int main()
{
Point pointOne = createpoint(5, 6);
Point pointTwo = createpoint(10, 4);
float distance = calculatedistancefunc(pointOne, pointTwo);
/* ...other stuff */
return 0;
}
有人告訴我這段代碼無效,因爲struct
沒有n在返回之前在createpoint(float x, float y)
函數中獲得malloc
'd,並且struct
將被刪除。 但是,當我使用我的struct
這樣,它似乎並沒有被刪除。
所以我的問題是: 我必須要malloc
這個struct
,爲什麼?/爲什麼不?
這是恕我直言的那種病態建議。如果你想做內存管理的權利,你不應該返回一個指向你的函數分配的dinamically分配結構的指針。您應該在第三個參數中請求預先分配的指針,並將其填充到您的方法中。 – mg30rg
@ mg30rg當你可以在函數中完成並返回它時,爲什麼要傳遞一個預先分配的結構指針? – Houssni
@YassineHoussni - 由於您比編寫代碼更可能會讀取您的代碼,所以在編寫舒適性時代碼可讀性更重要。如果將內存分配和釋放保留在同一個塊中,則內存泄漏將變得更加困難,因爲資源僅保留在需要的確切時間段,並且每次的清理(即:'malloc()'/'getmem() '/'new')與解除分配('free()'/'freemem()'/'delete')配對。你可以很容易地發現沒有delete的'new',但是你會發現'createpoint()'沒有'delete'嗎?維護程序員會這樣做嗎? – mg30rg