我试图创建一个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;
}
据我所知,鉴于我现在的代码,将无法返回数组,因为它会在函数结束时被销毁。任何人都可以帮助我关于如何在函数结束后从返回值访问数组?
此致
保
答案 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 ];
这将为您分配结构,然后您将初始化它们并根据您在函数中提供的代码返回。
但我会提醒您,一旦不需要,请使用“删除”
释放内存希望这有帮助 - 尼尔