从函数返回一组tm *结构

时间:2010-04-01 12:19:48

标签: 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;
 }

据我所知,鉴于我现在的代码,将无法返回数组,因为它会在函数结束时被销毁。任何人都可以帮助我关于如何在函数结束后从返回值访问数组?

此致

3 个答案:

答案 0 :(得分:4)

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

tm* time_v = new tm[3];

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

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

向量本身在堆栈上分配,但它包含一个在堆上分配的数组。复制向量时(例如返回它),也会复制基础数组的内容。

您还可以通过不使用临时变量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];

答案 1 :(得分:4)

创建副本并将其返回:

vector<tm> ret;
struct tm* time_save;

time_save = LastSavedTime();
ret.push_back(*time_save);

Sleep(5);
time_save = LastSavedTime();
ret.push_back(*time_save);

Sleep(5);
time_save = LastSavedTime();
ret.push_back(*time_save);

return ret;

显然,您需要更改签名。

答案 2 :(得分:0)

抱歉保罗,匆匆忙忙,不过试试这个......

   struct tm* time_v = new struct tm[ 3 ]; 

这将为您分配结构,然后您将初始化它们并根据您在函数中提供的代码返回。

但我会提醒您,一旦不需要,请使用“删除”

释放内存

希望这有帮助 - 尼尔