ライブラリを扱っているときに、提供されたサンプル ソース コードで次のコードを見つけました。
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 double ポインターへのキャストが行われる理由ではありません。私の質問は、カスタム関数を使用してメモリを解放し、なぜchar **
この関数の引数として選択されたのかということです。
C言語の知識がまだ限られているためにこの質問が発生していることは確かですが、とにかく、なぜこれが行われるのか、そしてこれが良い習慣であるかどうかを誰かが説明できますか.