GC don't understand
Nahon
lburger at hu.tesco-europe.com
Thu Nov 16 01:05:21 PST 2006
Daniel Keep wrote:
>Access Violations can be caused by a few things. One of these is
>attempting to use a null object, but it doesn't sound like that. The
>other is attempting to use an object that's been deleted.
>
>D's GC should never delete an object you still have a reference to; are
>you deleting objects manually? If so, that could be your problem:
>you're deleting an object and then trying to use it again.
>
>It's really the only thing I can think of at the moment; sorry.
Bill Baxter wrote:
>Could also be because you're passing D char[]'s to C functions that
>expect char*. Any time you call a C function that takes a string, you
>need to call toStringz() on it.
Neither. Without GC (first line in main() is gc.disable(); ) it works as I
expect -- just consuming huge amount of memory (increasing every time a file
is accessed by the size of the file and a few bytes), physical and virtual
alike. I've tried a few things: I set the variable containing the file to "",
specified the length of it to 0, deleted it, but no use. I think I really need
the GC, but anyhow I use it (calling only xxxCollect() or minimize()) I get an
Access Violation. For me it would be an option to pause all other threads and
wait for a garbage collection phase then resume, but I found no way for it.
The other: as I mentioned I use threads. I couldn't figure out how but the
application doesn't destroy all finished threads. I collect them in an array
(type ownThread[int]) and if one is terminated then I remove the reference
from this array. Then I print out Thread.getAll().length and it is increasing
I don't know why. Is there any tool for removing those? (AFAIK when the
thread's run() finishes, the thread is terminated. Am I wrong?)
Regards,
Nahon
More information about the Digitalmars-d
mailing list