在处理库时,在提供的示例源代码中,我找到了以下代码:
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 语言的了解仍然有限,但无论如何,任何人都可以解释为什么这样做以及这是否是一个好的做法。