加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

warning:函数返回局部变量的地址

发布时间:2020-12-16 04:59:28 所属栏目:百科 来源:网络整理
导读:我正在用C编写一个函数来做一些计算.我希望以这种方式将其作为数组值返回给另一个函数. 455 calculated_val = calculation(value_perf);358 int calculation(double* dataset){359360 double calculated[8] = {};361 calculated[0] = dataset[7]/dataset[5];
我正在用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;
}

请注意,您的调用代码需要调整以适应double * return.

根据Gauthier的评论,分配的数组的所有权从“计算”转移到调用函数,调用函数必须在不再需要时释放它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读