函数返回局部对象引用
问题 :
昨天再写C++的时候碰到 :
未处理的异常: 0xC0000005: 读取位置 0xCCCCCCCCC 时发生访问冲突
昨天晚上搞到一点多都没明白是怎么回事,上网查说指针访问内存时,访问了超过指针所管理的内
存区域.
今天再写其他函数的时候有调用了昨天的那个命名空间,这次提示errorC4172,返回局部变量或
临时变量的引用.
分析 :
突然发现昨天写的程序是:
1
2
3
4SpreadSheetCell& SpreadSheet::GetCelld(int x, int y)
{
return m_Data->GetCell(x, y);
}
返回的是 SpreadSheetCell类型的引用 —————SpreadSheetCell&
确实是返回了局部对象的引用——返回局部对象本身。局部对象再函数返回之前会被释放掉,返回出错。
修改:
改成返回类型本身 ————SpreadSheetCell
1 |
|
程序运行正常。
总结:
- 不能返回局部对象或临时对象
- 也不能返回局部对象的指针
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!