Memory allocation failed. Why?

ag0aep6g via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sun Nov 20 22:45:04 PST 2016


On 11/21/2016 07:36 AM, Stefan Koch wrote:
> On Monday, 21 November 2016 at 03:58:00 UTC, MGW wrote:
>> On Sunday, 20 November 2016 at 18:58:04 UTC, Basile B. wrote:
>>> On Sunday, 20 November 2016 at 17:47:50 UTC, MGW wrote:
>>>> import core.sys.windows.windows: MessageBoxA;
>>>>
>>>> void test() {
>>>>     for(int i; i != 10; i++) {
>>>>         ubyte[] buf;
>>>>         for(int j; j != 100000000; j++) buf ~= 65;
>>>>         MessageBoxA(null, "--on for--".ptr, "".ptr, 0);
>>>>         // delete buf; // if ON - then memory delete in step
>>>>     }
>>>>     MessageBoxA(null, "--off for--".ptr, "".ptr, 0);
>>>> }
>>>>
>>>> void main() {
>>>>     test();
>>>>     MessageBoxA(null, "--The end--".ptr, "".ptr, 0);
>>>> }
[...]
> You are appending 100_000_000 Times.
> Note that this will take up much more then 100 MB.
> Because the allocator cannot always grow the array.
> All previously allocated blocks are still in scope and could be reached.
> Therefore the memory is not released.

How could they be reached? The only reference is `buf', and when 
appending triggers relocation, `buf` should point to the new location, no?


More information about the Digitalmars-d-learn mailing list