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??
这是为什么呢?怎么解决?
在VS2015中,学习类遇到小问题
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
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系统的硬盘