blu*_*kin 10 c++ pointers reference
以下代码生成悬空引用:
int main()
{
int *myArray = new int[2]{ 100, 200 };
int &ref = myArray[0];
delete[] myArray;
cout << ref; // Use of dangling reference.
}
Run Code Online (Sandbox Code Playgroud)
我知道我不应该删除的磁盘阵列,但在一个大的程序,如果有人有什么删除记忆,而我有一个参考?它可以以某种方式确保没有人删除阵列吗?
什么是反对悬挂引用和悬空指针的最佳策略?
Ste*_*end 14
完成之前不要删除内存.
听起来很愚蠢,但这是你唯一的保护 - 正确理解谁拥有每个变量背后的内存,以及何时可以安全地释放它.
智能指针可以提供帮助,但上述内容仍然适用.
有些静态分析工具可以识别你在这里遇到的琐碎案例,但即便如此,这应该是第二道防线,你的第一道就是内存管理学科.
保持它们的范围正确:
int main(){
int *myArray;
myArray = new int[2]{ 100, 200 };
{
int& ref = myArray[0];
// use the ref here
cout<<ref; \\no longer a dangling reference
} // ref falls out of scope here
delete[] myArray;
}
Run Code Online (Sandbox Code Playgroud)
病人:医生,我这样做会很痛...
医生:那就别做...
引用内存时不要释放内存。
编辑
捕获问题的唯一方法是进行调试,进行良好的单元测试并在valgrind下运行,或者在valgrind下运行程序。
| 归档时间: |
|
| 查看次数: |
7066 次 |
| 最近记录: |