Yeni [] kullanılarak ayrılmış bir işaretçi üzerinde silme kullanırsanız bir bellek sızıntısı olduğunu kanıtlayan basit bir uygulama yazmak istiyorum.Silinin, yeni [] ayırdığı tüm belleği ayırmadığını nasıl gösterebilirim?
Şu anda CRT Debug kitaplığını, uygulamadan sonra belleği ayırmak için bellek ayırdıktan sonra ve yanlış ayrıldıktan sonra bellekte izlemek için kullanıyorum. Burada benim test kodu bakınız:
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#include <iostream>
#include <memory>
using namespace std;
int main()
{
_CrtMemState s1, s2, mem_diff;
// Allocate 40 bytes of memory.
int *leak = new int[10];
// Capture the memory state after the allocation.
_CrtMemCheckpoint(&s1);
// Deallocate that memory with incorrect delete operator.
delete leak;
// Capture and compare the memory after the deallocation.
_CrtMemCheckpoint(&s2);
_CrtMemDifference(&mem_diff, &s1, &s2);
_CrtMemDumpStatistics(&mem_diff);
return 0;
}
Ancak, benim hata ayıklama çıkışı Ben 40 byte ayırmanın görüyoruz.
0 bytes in 0 Free Blocks.
-40 bytes in -1 Normal Blocks.
0 bytes in 0 CRT Blocks.
0 bytes in 0 Ignore Blocks.
0 bytes in 0 Client Blocks.
Largest number used: 0 bytes.
Total allocations: 0 bytes.
bu çalışma neden için Benim diğer fikir tanımsız davranış olduğunu ve bu durumda derleyici özgü davranış olmasıdır: Bu Visual Studio 2015 Express benim ayıklama konsolundan çıkıştır.
Son cümle - Bu çok makul bir yorumdur;) –
Neden bunun her şeyi tahsis etmeyeceğini düşünüyorsunuz? – Soren
Önemsiz türlerde, 'int' gibi, VC++ 'nın' delete 've 'delete []' için tam olarak aynı kodu oluşturduğu bilinir. –