c++ - 从函数返回一个 tm* 结构数组

标签 c++

我试图创建一个 tm* 结构数组,然后在函数结束时返回它们。这是我目前拥有的:

struct tm* BusinessLogicLayer::GetNoResponceTime()
 {
   struct tm* time_v[3];
   struct tm* time_save;
   int s = 3;
   time_save = LastSavedTime();
   time_v[0] = time_save;
   sleep(5);
   time_save = LastSavedTime();
   time_v[1] = time_save;
   sleep(5);
   time_save = LastSavedTime();
   time_v[2] = time_save;

   return time_v;
 }

我知道根据我现在的代码,不可能返回数组,因为它会在函数结束时被销毁。任何人都可以帮助我了解在函数结束后如何能够从返回值访问数组吗?

问候

保罗

最佳答案

要么在堆上分配数组,但您需要记住在使用完数组后delete[]该数组。

tm* time_v = new tm[3];

或者因为这是 C++,更好的选择是使用 vector

std::vector<tm> time_v(3);

vector 本身分配在堆栈上,但它包含一个分配在堆上的数组。当您复制 vector (例如返回它)时,底层数组的内容也会被复制。

您还可以通过不使用临时变量time_save来简化函数

time_v[0] = *LastSavedTime();
sleep(5);

time_v[1] = *LastSavedTime();
sleep(5);

time_v[2] = *LastSavedTime();

在 C++ 中也不需要 C 风格的结构声明

struct tm* time_v[3];

//should be
tm* time_v[3];

关于c++ - 从函数返回一个 tm* 结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2560214/

相关文章:

c++ - OpenCV:如何进行 Delaunay 三角剖分并返回邻接矩阵?

c++ - 在运行 cvCopyImage/cvResize 时崩溃

c++ - 如何显示/保存返回 AT 命令的值

c++ - 遍历多维数组时遇到问题

c++ - 有没有办法让 MSVC 在 x64 上的寄存器中传递结构参数?

c++ - 是否有适用于 MacOS 的免费 C++ 编译器?

c++ - 警告 C4800 : 'int' : forcing value to bool 'true' or 'false'

c++ - 将 google::protobuf::RepeatedField<float> 转换为 float

c++ - 根据 S_ISREG C/C++, "regular file"是什么意思?

c++ - B.Stroustrup 新书中的优化与多线程