2009-05-22 19 views
5

Bir sınıfta statik std::vector var. Ben Microsoft'un bellek sızıntısı algılama araçları kullandığınızda:Bellek sızıntısı (çeşit) statik bir std :: vektör ile

_CrtMemState state; 
_CrtMemCheckpoint(& state); 
_CrtMemDumpAllObjectsSince(& state); 

ben vektör içine şeyler eklemek sonra bir sızıntı raporlar. Bu bana mantıklı geliyor çünkü vektöre bir şey eklendiğinde yeni alan tahsis ediliyor. Program bitene kadar bu alan ayrılmaz (vektör statik olduğundan). Bu doğru mu?

Vektörü içeren sınıfın yıkıcısı içinde, vektöre koyduğum nesneyi siliyorum. Ancak, ekleme yapıldığında ayrılan bellek hala takılıyor. Bu alanı silmek için zaten var mı?

+0

Vektöre eklediğiniz kodu ve başvuruda bulunulan nesneyi silen nesneyi gösteren bir kod gösterebilir misiniz? –

+0

İlgilenirseniz, James ve ilproxyil sorunu çözmeme yardımcı oldu. İlgilenirsen haberim olsun. – Joe

cevap

16

Vektörü boş bir şekilde takas edebilirsiniz - bu, belleği serbest bırakır.

Q: Shrinking a vector

+1

Harika! İşe yaradı. Teşekkürler. Bir kaç gün boyunca kafamı duvara çarpmak yerine, bu soruyu daha önce sormuş olsaydım. :-) – Joe

+0

Bu cevap yanlış: [sadece takas numarası _may_ belleği serbest bırakın] (http://stackoverflow.com/q/7829018/560648). –

8

James yazdıklarını eklemek için Ayrıca bkz. Bunu yapmak için: belleğini çıkarmak istediğiniz vektör olan 'v' vektörüdür.

+0

Ayrıntılar için teşekkürler. – Joe

0

Bu yalnızca Visual Studio'nun bir tuhafıdır. Vektör yıkıcı hafızayı serbest bırakır, ancak bellek kontrol modülü her zaman onu tespit etmez, bu yüzden şikayet eder. Biraz acı çekiyor ama endişelenecek bir şey yok.

+1

VS değil bir tuhaflık Onun vektörü statikti. Statiklerin CRT tarafından serbest bırakılmasından önce sızıntıları kontrol ediyordu. –

+1

Bu tuhaflıktır. VS, Nu Mega Bounds Checker olarak adlandırılan şeyin aşağıdan bir versiyonunu içerir. Sınır Kontrolörünün eski sürümleri iyi çalışıyordu, ancak VS7.x ile birlikte gelen sürüm yanlış oluyor. Statik nesnelerde mevcut olmayan bellek sızıntılarını düzenli olarak bildirir. –