我定义了一个将GSL向量转换为数组的函数.该函数返回一个指向数组的指针.
double * vec2array(const gsl_vector * v){
double * out = calloc(v->size,sizeof(double));
for( int i = 0; i < v->size; i++ ){
out[i] = gsl_vector_get(v,i);
}
return out;
}
Run Code Online (Sandbox Code Playgroud)
使用返回值作为另一个函数的参数是不好的做法,即:
plot(vec2array(x),vec2array(y));
Run Code Online (Sandbox Code Playgroud)
是内存泄漏?
将函数的返回值直接用作参数本身并没有错.
但是,您对它的特殊使用确实会泄漏内存.这很容易看到,因为你永远不会打电话给free()你的记忆calloc().(除非你的plot()函数调用free(),至少.)