Unexpected memory reuse
    Anonymous via Digitalmars-d-learn 
    digitalmars-d-learn at puremagic.com
       
    Thu Jul 31 11:30:40 PDT 2014
    
    
  
module test;
import std.stdio;
class buffer(T, size_t sz) {
	auto arr = new T[sz];
	enum end = sz-1;
}
void foo(T, size_t sz)() {
	auto buf = new buffer!(T,sz);
	writeln("before ", buf.arr);
	foreach(ref ele; buf.arr) ++ele;
	writeln("after ", buf.arr);
}
unittest {
	foo!(uint,4);
	foo!(uint,4);
	auto a = new buffer!(uint,4);
	writeln(a.arr);
	auto b = new buffer!(uint,4);
	writeln(b.arr);
}
void main() {
	auto c = new buffer!(uint,4);
	writeln(c.arr);
}
rdmd -unittest test.d
before [0, 0, 0, 0]
after [1, 1, 1, 1]
before [1, 1, 1, 1]
after [2, 2, 2, 2]
a [2, 2, 2, 2]
b [2, 2, 2, 2]
c [2, 2, 2, 2]
[Finished in 1.3s]
I narrowed this down after much frustration. I'm using some fixed 
size buffers and thought it useful to define the size as part of 
the type, from which other aspects could be statically derived. 
Apparently it's not so useful. So I guess I can refactor the 
buffer's array length into the constructor or something, but I 
really didn't see this kind of memoization(?) coming.
    
    
More information about the Digitalmars-d-learn
mailing list