Garbage collection from associative arrays
    Sebastian Beschke 
    s.beschke at gmx.de
       
    Sat Mar 25 05:47:08 PST 2006
    
    
  
The following program creates a couple of instances of a class and
stores them in an associative array. It then tries to periodically
access those instances via the associative array, performing garbage
collects in between.
As it appears, a fullCollect will destroy the objects, even though they
are stored in an associative array. This leads to an access violation in
the second loop.
Is this a known bug? Can it be fixed? Are there any workarounds?
Regards, Sebastian
Output on my machine:
Loading...
class created
class created
class created
97
98
99
class killed (99)
class killed (98)
class killed (97)
Error: Access Violation
Program code:
private {
	import std.gc;
	import std.stdio;
}
class SomeClass {
	this(char value) {
		writefln("class created");
		_value = value;
	}
	
	~this()
	{
		writefln("class killed (%d)", _value);
	}
	
	char value() {
		return _value;
	}
	
	
	private {
		char _value;
	}
}
static char[] allChars = [
	'a', 'b', 'c'
	];
SomeClass[char] _chars;
	
void _realLoad() {
	writefln("Loading...");
	foreach(char ch; allChars) {
		_chars[ch] = new SomeClass(ch);
    }
}
int main(char[][] args)
{
	bool done = false;
	_realLoad();
	
	while(!done)
	{
		foreach(char ch; allChars) {
			SomeClass obj = _chars[ch];
			writefln("%d", obj.value);
		}
		std.gc.fullCollect();
	}
}
    
    
More information about the Digitalmars-d-bugs
mailing list