BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #88712同步于 2015/9/21
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

C++累的动态内存分配,编译没问题计算也能成功,最后提示内存泄

sharonyue
2015/9/21镜像同步15 回复
最近用函数写了个程序,打算改成类的。都没问题了,最后剩下个内存有问题,排查不出来错误。简化如下: 这个类的H文件: #ifndef KDF_H #define KDF_H class KDF { private: //- Disallow default bitwise copy construct KDF(const KDF&); //- Disallow default bitwise assignment void operator=(const KDF&); protected: int name_; //- Number of nodes int nodes_; //- Value of sigma double sigma_; //- moments double* momentsOri_; public: //- Construct from components KDF ( const int& name ); //- Destructor ~KDF(); }; #endif C文件: #include "KDF.H" KDF::KDF ( const int& name ): name_(name) { nodes_ = 3; momentsOri_ = new double(2*nodes_ + 1); //if (nodes_ < 4) { momentsOri_[0] = 0.0; momentsOri_[1] = 0.0; momentsOri_[2] = 0.0; momentsOri_[3] = 0.0; momentsOri_[4] = 0.0; momentsOri_[5] = 0.0; momentsOri_[6] = 0.0; } } KDF::~KDF() { delete momentsOri_; }; 主函数很简单: int main() { int a = 1; KDF gaussian(a); return 0; } 编译运行都没问题,怎么内存出错呢。 我感觉应该是构造函数new那里赋值的问题
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
gdl机器人#1 · 2015/9/21
delete momentsOri_;回收数组是这样吗?
sharonyue机器人#2 · 2015/9/21
已解决 谢谢
shanshanpt机器人#3 · 2015/9/22
delete [] momentsOri_;
timruning机器人#4 · 2015/9/22
问个比较傻的问题,c++不回收内存行么?感觉容易犯错
sharonyue机器人#5 · 2015/9/22
其实不是delete那个的问题,我试了用[]和不用一样的错误 重要的是 new[]而不是new() 不知道为什么编译没问题
sharonyue机器人#6 · 2015/9/22
【 在 timruning 的大作中提到: 】 : 问个比较傻的问题,c++不回收内存行么?感觉容易犯错 教材说要回收 我简单试了下可以不回收不报错,大型程序bug就不清楚了
FromMars机器人#7 · 2015/9/22
可以啊 但是你的机器内存不是无限大的 不回收的话 内存泄露 运行时间一长占用内存越来越多,机器会卡顿、死机 但是你又说为什么他自己不会自动识别内存、自动释放? 是的,他不会,除非你关闭了进程,关闭进程之后,系统就会帮你把所有内存释放出来了(除了共享给其他进程并且inuse不为0的内核对象)。 【 在 timruning 的大作中提到: 】 : 问个比较傻的问题,c++不回收内存行么?感觉容易犯错
BTup机器人#8 · 2015/9/22
C:10 momentsOri_ = new double[2*nodes_ + 1]; C:26 delete [] momentsOri_; 【 在 sharonyue 的大作中提到: 】 : 最近用函数写了个程序,打算改成类的。都没问题了,最后剩下个内存有问题,排查不出来错误。简化如下: : 这个类的H文件: : [code=c] : ...................
Studyboy机器人#9 · 2015/9/22
new double(7)代表new了一个double变量,赋值为7,所以后面的数组赋值都是错误的,C++并没有对这种错误进行编译检查