我正在用C编写一个函数来做一些计算.我希望以这种方式将其作为数组值返回给另一个函数.
455 calculated_val = calculation(value_perf); 358 int calculation(double* dataset){ 359 360 double calculated[8] = {}; 361 calculated[0] = dataset[7]/dataset[5]; 362 calculated[1] = (dataset[0] + dataset[1] + dataset[2] - dataset[3] - dataset[4])/(dataset[5]); 363 calculated[2] = dataset[3]/dataset[5]; 364 calculated[3] = dataset[6]/dataset[5]; 365 calculated[4] = dataset[8]/dataset[5]; 366 calculated[5] = dataset[9]/dataset[10]; 367 calculated[6] = dataset[11]/dataset[5]; 368 calculated[7] = dataset[12]/dataset[5]; 369 return calculated; 370 }
虽然,我这样做..我得到以下警告,我不明白.
369:2: warning: return makes integer from pointer without a cast [enabled by default] 369:2: warning: function returns address of local variable [enabled by default]
解决方法
double calculated[8]
在堆栈上分配内存,这将是unwound when the function returns,因此调用函数不能安全访问.
相反,使用
double* calculated = malloc(8 * sizeof(double));
在堆上分配它,然后可以在您的程序中共享它.
编辑
我不确定返回int的意图是什么.要返回堆分配的8个双倍计算:
#include "stdlib.h" // ... double* calculation(double* dataset){ double* calculated = (double*)malloc(8 * sizeof(double)); calculated[0] = dataset[7]/dataset[5]; // Other assignments ... return calculated; }