在對待一個庫,在所提供的示例源代碼鑄造double類型的變量char類型的變量,我發現下面的代碼:ç釋放內存
x = (double *) malloc (narcs * sizeof (double));
dj = (double *) malloc (narcs * sizeof (double));
pi = (double *) malloc (nnodes * sizeof (double));
slack = (double *) malloc (nnodes * sizeof (double));
我發現沒有什麼特別的在這裏,但釋放內存時,源代碼示例執行以下操作:
free_and_null ((char **) &x);
free_and_null ((char **) &dj);
free_and_null ((char **) &pi);
free_and_null ((char **) &slack);
的free_and_null代碼是:
static void
free_and_null (char **ptr)
{
if (*ptr != NULL) {
free (*ptr);
*ptr = NULL;
};
};
我的問題是爲什麼,釋放以前分配的內存時,它完成鑄造爲char雙指針。我的問題是,爲什麼這樣做是這樣,使用自定義函數來釋放內存,以及爲什麼它被選爲一個char **
這個函數的參數。
我知道,肯定是這個問題是因爲我仍然有限的C語言知識的發生,但無論如何,任何人都可以解釋爲什麼這樣做,如果這是一個很好的做法。
您不需要在C程序中投射'malloc'的返回值。 –
假設所有指針具有相同的大小和表示形式,是否構建char *'或'void *','free_and_null'。這是馬虎。我不會使用它。 –
是不是'*(char **)(&x)= NULL'未定義的行爲? (當x是'double *') – asaelr