在VS2015中,学习类遇到小问题

class cube
{
public:
//获取长宽高
int* getLWH(int l, int w, int h)
{
m_H = h;
m_L = l;
m_W = w;
int r[] = { m_L,m_W ,m_H };
return r;
}
private:
int m_L;
int m_W;
int m_H;
};
bool isSame(cube &c1,cube &c2)
{
if (c1.getLWH(10, 10, 10)[0] != c2.getLWH(20, 30, 5)[0]||
c1.getLWH(10, 10, 10)[1] !=c2.getLWH(20, 30, 5)[1]||
c1.getLWH(10, 10, 10)[2] != c2.getLWH(20, 30, 5)[2])
{
return false;
}
else
{
return true;
}
}
int main()
{
cube c1;
c1.getLWH(10, 20, 30);
cube c2;
c2.getLWH(20, 30, 5);
bool ret=isSame(c1, c2);
cout << ret << endl;
system("pause");
return(0);
}
在调用isSame时,应该返回false;但编译器总是返回true??
这是为什么呢?怎么解决?

我觉着问题在这里
int r[] = { m_L,m_W ,m_H };
这是在栈上申请的内存,返回的是栈上数据的地址。函数返回后,r出栈。第二次执行getLWH时,r重新入栈,可能还是这个地址。
所以返回的是可能相同。
代码修改如下

int* getLWH(int l, int w, int h)
{
m_H = h;
m_L = l;
m_W = w;
int* r=&m_L; //成员变量在内存中是连续分配的,所以可以返回第一个成员地址
return r;
}