C语言 为什么使用宏 #define FREE_ARG 字符*来释放内存,全部由malloc分配(数字配方)



我正在研究数值配方中的一些例程,我不明白在实现中使用宏 #define FREE_ARG 字符*来释放内存。下面是一段代码:

#include <stdio.h>
#include <stddef.h>
#include <stdlib.h>
#define NR_END 1
#define FREE_ARG char*
float *vector(long nl, long nh)
/* allocate a float vector with subscript range v[nl..nh] */
{
    float *v;
    v=(float *)malloc((size_t) ((nh-nl+1+NR_END)*sizeof(float)));
    if (!v) nrerror("allocation failure in vector()");
    return v-nl+NR_END;
}

void free_vector(float *v, long nl, long nh)
/* free a float vector allocated with vector() */
{
    free((FREE_ARG) (v+nl-NR_END));
\           ^
\           '----- why?
}

我的问题是:为什么以这种方式释放内存free((FREE_ARG) (v+nl-NR_END));

这可能是一个非常糟糕的代码。注意

free()采用参数类型 void * 。任何指针类型都可以隐式转换为void *,不需要强制转换。


注意:

在这一行中

 v=(float *)malloc((size_t) ((nh-nl+1+NR_END)*sizeof(float)));

石膏也不是必需的,应避免使用。请参阅此讨论,了解为什么不在C中转换malloc()和 family 的返回值。这也是早期使用不良的原因之一。

相关内容

  • 没有找到相关文章