一段内存泄露的代码为什么样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星
- 暂无评论信息