April 04, 2004 [bug?] access violation on custom new / delete | ||||
---|---|---|---|---|
| ||||
hiya. this code causes an access violation: ------------------------------------------------------------ import std.c.stdlib; import std.outofmemory; import std.gc; class Foo { new(uint sz) { void* p; p = std.c.stdlib.malloc(sz); if (!p) throw new OutOfMemory(); std.gc.addRange(p, p + sz); return p; } delete(void* p) { if (p) { std.gc.removeRange(p); std.c.stdlib.free(p); } } } void main() { printf("new...\n"); Foo bar = new Foo; printf("delete...\n"); delete bar; printf("fatality...\n"); } ------------------------------------------------------------ am i missing sth or is that a bug ? obviously the code comes from "http://www.digitalmars.com/d/memory.html", though i had to add "std." before 'gc.*' to make it compile <- the documentation needs a change. compile log = """ ------------------------------------------------------------ D:\dmd\bin\..\..\dm\bin\link.exe C:\h3\d\dide\Projects\Temp\Temp,Temp.exe,,user32+kernel32/noi; D:\dmd\bin\dmd.exe -odC:\h3\d\dide\Projects\Temp -ofTemp.exe "C:\h3\d\dide\Projects\Temp\Temp.d" ------------------------------------------------------------ Build started on 4/4/2004 at 13:13:58 Build Succeeded """ OUTPUT = """ C:\H3\D\dide\Projects\Temp>temp new... delete... Error: Access Violation """ im running WindowsXP SP1 on AthlonXP. Im using the most recent version of dmd. |
April 05, 2004 Re: [bug?] access violation on custom new / delete | ||||
---|---|---|---|---|
| ||||
Posted in reply to h3r3tic | h3r3tic wrote:
[...]
> am i missing sth or is that a bug ?
[...]
Both.
Foo is missing any "normal" declaration. So it is completely useless. Declaring something, I used `int x;', makes the error vanish.
Anyway this shouldn't cause an AV or an "Win32 exception", which throws when deleting the printf.
So long!
|
Copyright © 1999-2021 by the D Language Foundation