内存分配-c++类的对象中分配的内存的内存能不能在在程序中间delete掉再重新分配?

问题描述

c++类的对象中分配的内存的内存能不能在在程序中间delete掉再重新分配?
Matrix& Matrix::operator=(const Matrix &mp) {
if (mp.row_n != row_n||mp.column_n != column_n) {
std::cout << ""Error size not match"" << std::endl;
return this;
}
/

for (int i = 0; i < row_n; i++) {
delete[] element[i];
}
delete[] element;
element = (int **)new int*[mp.row_n];
for (int i = 0; i < column_n; i++)
element[i] = new int[mp.column_n];
*/
for (int i = 0; i < row_n; i++)
for (int j = 0; j < column_n; j++)
element[i][j] = mp.element[i][j];
return *this;
}

注释中的那一句加上之后程序就报错说*** Error in `./temp': double free or corruption (out): 0x0000000000caf1d0 ***

解决方案

当然可以了,指针指向的区域,可以释放掉再从新分配的

解决方案二:
估计是你的delete放的地不对,还没new就delete肯定错,至少可以先判断一下,指针是否可用

解决方案三:
一个简单的解决之法,在 delete 之后被被 delete 的对象赋值为空,即 NULL。
每次 delete 之前判断要 delete 的对象是否为空?如果不为空则释放,否则不释放。

解决方案四:
delete只能delete一次,之后这个指针指向的内存就无效了,至于再分配是不是还是在那个内存区域这个不一定。
你可以对再用new重新申请,传给指针变量。new后又可以delete了,如此反复。

解决方案五:
当然可以delete释放后再次new分配
你的问题是释放了同一个指针多次。

时间: 2024-08-19 22:20:13

内存分配-c++类的对象中分配的内存的内存能不能在在程序中间delete掉再重新分配?的相关文章

内存泄漏-IE8 使用img对象动态加载图片,内存一直增长

问题描述 IE8 使用img对象动态加载图片,内存一直增长 最近使用一个图片插件,在IE8使用img对象动态加载图片的时候,内存不断增长,不会释放,直到内存不够用,系统卡死,求大大解决 解决方案 0最近使用一个图片插件,在IE8使用img对象动态加载图片的时候,内存不断增长,不会释放,直到内存不够用,系统卡死,求大大解决

PHP类与对象中的private访问控制的疑问_php技巧

复制代码 代码如下: class Bar { public function test() { $this->testPrivate(); $this->testPublic(); } public function testPublic() { echo "Bar::testPublic\n"; } private function testPrivate() { echo "Bar::testPrivate\n"; } } class Foo ext

PHP类和对象函数实例详解

1. interface_exists.class_exists.method_exists和property_exists:         顾名思义,从以上几个函数的命名便可以猜出几分他们的功能.我想这也是我随着对PHP的深入学习而越来越喜欢这门编程语言的原因了吧.下面先给出他们的原型声明和简短说明,更多的还是直接看例子代码吧. bool interface_exists (string $interface_name [, bool $autoload = true ]) 判断接口是否存在

mongodb mmap内存映射是把文件中数据全部映射到内存中的吗?

问题描述 mongodb mmap内存映射是把文件中数据全部映射到内存中的吗? 资料上说:在Mongodb中,其使用了操作系统底层提供的内存映射机制,即MMAP.MMAP可以把磁盘文件的一部分或全部内容直接映射到内存,这样文件中的信息位置就会在内存中有对应的地址空间,这时对文件的读写可以直接用指针来做,而不需要read/write函数了.同时操作系统会将数据刷新保存到磁盘上. 我有个疑问:这个内存映射,是把文件中数据全部映射到内存中的吗?还是只是映射一部分内容,那么这部门内容又是什么的呢? 请专

安卓图片内存溢出-安卓中,处理图片产生了内存溢出怎么办啊?

问题描述 安卓中,处理图片产生了内存溢出怎么办啊? 安卓中,处理图片的时候内存溢出怎么解决啊?今天面试问这个问题(O_O)?--当时就蒙了---求指点--?? 解决方案 1.对操作的Bitmap使用弱引用 2.使用LruCache+DiskLruCache(内存+本地缓存)提高内存使用率 3.可以的话适当裁剪ImageView,一般图片没必要太大,适合手机即可 4.适当减少图片质量,理由同上 5.反射调用com.android.internal.os.BinderInternal中的forceG

对象内存分配-Java对象中的对象如何分配内存?

问题描述 Java对象中的对象如何分配内存? 在Java中,比如A a=new A ();是在堆内存中创建了一个对象,然后把这个对象的引用传递给栈内存中的对象变量a.那如果a对象拥有一个字符串对象,那a对象中保存的是这个字符串对象的引用吗? 解决方案 a是A类型的.不能拥有一个字符串对象. 如果A中有一个字符串字段,那一样的,堆上的a中存储着指向这个字符串的引用.字符串本身则放在常量池或者也在堆上. 解决方案二: 不知道是不是这个意思:将字符串对象符值给a,这是不可以的,除非是相同类型,如果A是

link中可以将同一个内存分配给不同的对象么?怎么实现的?

问题描述 link中可以将同一个内存分配给不同的对象么?怎么实现的? link中可以将同一个内存分配给不同的对象么?怎么实现的? 解决方案 同时让多个引用指向同一个对象就是了.怎么可能重复分配呢.

c++在类的方法中被实例化的对象能自动释放内存么

问题描述 c++在类的方法中被实例化的对象能自动释放内存么 我没有使用new,就是最一般的实例化,如果没有的要怎么释放,求大神教具体的方法 解决方案 没有使用new,就是最一般的实例化,系统会自动释放的. 解决方案二: 当对象的生命周期终止时会自动释放对象所占用的内存. new声明的对象保存在堆中,直到调用delete时生命周期才终止.对象销毁内存被释放. 而直接创建的对象是保存在局部栈中,出了大括号,生命周期就终止了,对象销毁自动释放内存.函数体就是用一个大括号包起来的,函数内声明的对象,出了

C#中“.NET技术”字符串的内存分配与驻留池

刚开始学习C#的时候,就听说CLR对于String类有一种特别的内存管理机制:有时候,明明声明了两个String类的对象,但是他们偏偏却指向同一个实例.如下: String s1 = "Hello";String s2 = "Hello"; //s2和s1的实际值都是Hellobool same = (object) s1 == (object) s2;//这里比较s1.s2是否引用了同一个对象实例//所以不能写作bool same = s1 == s2; //因为