Spring_L 2020-07-03 17:53 采纳率: 0%
浏览 75
已采纳

在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??
这是为什么呢?怎么解决?

  • 写回答

1条回答 默认 最新

  • wlj1234 2020-07-04 15:47
    关注

    我觉着问题在这里
    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;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘