如何避免访问已删除的内存块时出错
How to avoid error when access to the deleted memory block?
如果标题不清楚,我有这个例子:
int *a = new int[5];
int*b = a;
delete[] a;
a = NULL;
现在a
是NULL而b
不是。如果我访问b
,它将返回错误的值,并可能使程序崩溃。
如何预防?
现在是NULL
不完全是。a
指向一些"无效"(delete
-d)内存。如果您希望它为NULL
,请手动取消它。
delete a;
必须delete[] a;
如何防止这种情况发生?
不可能,如果你真的需要使用(原始)指针——只要小心a
的生命周期。这与引用相似——你也应该小心。
为了避免类似的情况,智能指针非常有用。或者直接使用堆栈变量(当然,在适用的情况下)。
相关文章:
- 将字符串存储在c++中的稳定内存中
- 访问者访问变体并返回不同类型时出错
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 如何在多写入器情况下对文件支持的共享内存中的大页面出错
- 在C 中分配内存时出错
- 读取字符串 的字符时出错.分配内存
- c++ 数组和内存出错
- 获取应用程序的内存使用情况时出错
- 使用calloc分配内存时出错(释放堆块XXX后在YYY修改)
- 为双精度值分配内存时出错
- 在链表的开头插入时读取内存时出错
- 为二维数组动态分配内存时出错
- 释放内存时出错
- 将矢量bool复制到CUDA内存时出错
- Std::out_of_range在内存位置0x0043f7c4.使用矢量和输入文件时出错
- 试图构建最小内存时出错
- 如果使用memcpy,释放内存时出错
- 使用内存出错
- 尝试获取C++上的当前进程内存大小时出错,MinGW
- 如何避免访问已删除的内存块时出错