【发布时间】:2021-12-24 18:15:16
【问题描述】:
我在主函数中有一个结构数组,我想保存几个结构的数据。我正在使用一个接收所需数据并将其放入函数中定义的结构的函数。 在过程结束时,我返回这个结构的地址。 但是如果我多次调用这个函数,它总是定义相同的结构地址,所以我会丢失上一次调用的数据。
#include<stdio.h>
struct data {
int day;
};
struct data* Dates(int val);
int main() {
struct data* Dates1[3];
int array[] = { 12, 15, 2021 };
for (int i = 0; i < 3; i++) {
Dates1[i] = Dates(array[i]);
}
}
struct data* Dates(int val) {
struct data Date;
Date.day = val;
return &Date; ///AFTER EVERY CALL TO THIS FUNCTION IT RETURN THE SAME ADDRESS!!!
}
【问题讨论】:
-
您不能从函数中返回局部变量。打开你的警告——你的编译器应该向你抱怨这个。相反,要么返回一个
struct data(并将其直接存储在您的数组中),要么返回一个malloc()(并由调用者free()ed)。 -
如果您使用正确的警告选项进行编译,您的编译器会抱怨您甚至尝试这样做。其实GCC默认开启
-Wreturn-local-addr,Clang默认开启-Wreturn-stack-address。您是否可能因为它“只是”一个警告而忽略它?您可以添加-Werror,以便您不能忽略警告。
标签: c