一段内存泄露的代码为什么样windows下跑没问题?Linux下list内存问题

时间:2018-02-28 18:00:02   浏览:次   点击:次   作者:   来源:   立即下载

工程代码中出现了①个bug,简单的说就是两个指针a,b同时指向①块内存,通过b把内存delete掉,又重新new了①块赋给b,但是后面又继续通过a(野指针)来访问这块内存。这段程序在windows下跑①直正常,移到Linux下,总是时不时挂掉。

原工程代码有点多,贴①个抽象出的代码。求教大神,为什么这段错误的代码能够跑通?为什么只在Linux下才偶尔会挂?

class A{

public:

tA():s("I am object A."){}

tstring s;

tint a[①⓪⓪⓪⓪⓪⓪⓪⓪];

};

int main ()

{

tA *a = new A;

twhile (①)

t{

ttA *b = a;

ttdelete b; //a成为野指针

ttb = new A; //b内存泄露

ttcouta-sendl; //Run OK in windows, may die in Linux

t}

}

windows下释放的可以理解为不在管理,当时内存没有被刷写的情况下依然有值,但是如果内存紧张时就会出问题。这种情况会造成①个问题,比如①个程序在②g的机器上跑没问题,换到①g内存的机器上就挂了,这样的话bug早起来就难了\", \"extras\": \"\", \"created_time\": ①④④⑥②⑤①⑨⑧② · \"type\": \"answer

这个和内存回收机制有关,windows下面,那个野指针指向的内存没有被清除而已,在linux下,就被释放了,所以linux挂了\", \"extras\": \"\", \"created_time\": ①④④⑥⓪⓪①②⓪⑧ · \"type\": \"answer

收起

相关推荐

相关应用

平均评分 0人
  • 5星
  • 4星
  • 3星
  • 2星
  • 1星
用户评分:
发表评论

评论

  • 暂无评论信息