函数返回局部对象引用

问题 :

昨天再写C++的时候碰到 :

未处理的异常: 0xC0000005: 读取位置 0xCCCCCCCCC 时发生访问冲突

昨天晚上搞到一点多都没明白是怎么回事,上网查说指针访问内存时,访问了超过指针所管理的内
存区域
.

今天再写其他函数的时候有调用了昨天的那个命名空间,这次提示errorC4172,返回局部变量或
临时变量的引用
.

分析 :

突然发现昨天写的程序是:

1
2
3
4
SpreadSheetCell& SpreadSheet::GetCelld(int x, int y)
{
return m_Data->GetCell(x, y);
}

返回的是 SpreadSheetCell类型的引用 —————SpreadSheetCell&

确实是返回了局部对象的引用——返回局部对象本身。局部对象再函数返回之前会被释放掉,返回出错。

修改:

改成返回类型本身 ————SpreadSheetCell
1
2
3
4
SpreadSheetCell SpreadSheet::GetCelld(int x, int y)
{
return m_Data->GetCell(x, y);
}

程序运行正常。

总结:

  1. 不能返回局部对象或临时对象
  2. 也不能返回局部对象的指针

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!