Numerical recipes, 2nd edition ( http://numerical.recipes ) 一书使用以下代码为带有下标 [nl..nh] 的向量 v 分配/释放内存:
#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));
}
问题1:加/减NR_END
元素的目的是什么?
问题2:转换float *
为char *
in的目的是什么free_vector
?
我知道这+1
是malloc
由于数组的包含右边界(通常在 C 中不包含)。