gpt4 book ai didi

c - 警告 : function returns address of local variable

转载 作者:IT王子 更新时间:2023-10-29 00:23:55 30 4
gpt4 key购买 nike

我正在用 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 个 double 的堆分配计算:

#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* 返回。

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

关于c - 警告 : function returns address of local variable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18866000/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com