"delete [] pointer"不删除所有内存阵列?
"delete [] pointer" does not delete all the memory array?
我对c++还是个新手。我必须删除指针和内存分配,一旦我完成循环。我使用new()
来分配内存,最后使用delete
来释放数据。
int main()
{
float *ptr;
ptr = new float[16];
for(int i=0; i<16; i++)
{
ptr[i] = 10.0f+i;
cout << i << " " << ptr[i] << endl;
}
delete[] ptr;
cout << ptr[2] << endl; **// I STILL HAVE THE VALUE AT THIS ADDRESS. AFTER DELETING**
}
return 0;
}
为什么数据删除后还存在于内存中
这是未定义的行为。您正在访问已删除的内存。
因为删除内存块不会使指向该内存块的所有指针的值归零。删除内存只是记录了该内存可用于其他目的。在这种情况发生之前,记忆可能看起来是完整的——但你不能指望它。在一些编译器/运行时/体系结构组合中,你的程序会表现得不同。
调用delete[]
时会发生两件事:
- 如果数组的类型具有非平凡析构函数,则按相反顺序对数组中的每个元素调用析构函数
- 数组占用的内存被释放
调用delete
后访问数组占用的内存会导致未定义的行为(也就是说,任何事情都可能发生——数据可能仍然在那里,或者当您尝试读取它时程序可能崩溃,或者其他更糟糕的事情可能发生)。
RAII使用。要么把它包装在一个类中,要么使用STL,不要自己管理内存。c++是强大的,但也可以这么说,你也可以把你的腿打飞。一个更好的做法是把它放在自己的作用域中,这样可以防止作用域之外的任何东西访问你的指针。
{
Foo* pFoo = new Foo;
// use pFoo
delete pFoo;
}
// anything using pFoo beyond here fails at compilation
相关文章:
- 为什么我能够为阵列分配比计算机实际拥有的内存更多的内存
- 为什么删除分配的阵列会导致内存错误?
- 保护类内存阵列以检测分段错误
- 解除分配此特定 2D 阵列的内存
- 内存中的阵列存储
- 内存C++复制是否将内存地址复制到另一个阵列
- 通过"Value Template Argument"与常规阵列在堆栈中分配内存
- OPENCL-如何使辅助功能返回阵列并将内存的部分从恒定内存空间转移到私有
- 动态3维阵列中的内存泄漏
- 复制到新阵列时出现动态内存分配问题
- C++ 清除动态阵列中的内存 - 内存无法清除
- 访问字符阵列中不可用的内存位置(超出范围值)
- 内存堆,动态设置阵列
- 相邻阵列的内存分配
- 如何找到我的阵列使用的内存
- 如何将内存映像分配给DLIB阵列2d或映像
- 动态内存阵列/程序崩溃
- visual C++新与Malloc的对象动态内存阵列
- 需要一个代码来动态分配 >1GB 内存阵列在 Visual Studio C++
- "delete [] pointer"不删除所有内存阵列?