Robert Fraser wrote:
Simpler version, sans printf:

module leak;

import tango.core.Memory;

struct Data
{
    Data* prev;
    char[4092] something;
}

public void main()
{
    Data* data;
    Data* newData;
    int i;
    while(true)
    {
        for(i = 0; i < 10_000; i++)
        {
            newData = new Data;
            newData.prev = data;
            data = newData;
        }
        data = null;
        newData = null;

At this point it's quite possible that you still have a reference to newData in a register. If you want to be sure the collect call below works as intended for this test, try adding:

          newData = new Data;

here.

        i = 0;
        GC.collect();
    }
}

Beyond that, you'll just potentially end up with a bunch of false positives, since you have a big static array in the same block as a pointer. But since you aren't actually setting the array contents in this test, that clearly isn't a problem here.

Reply via email to