On Wednesday, 28 November 2012 at 13:43:04 UTC, Maxim Fomin wrote:
On Wednesday, 28 November 2012 at 13:09:36 UTC, Dan wrote:
Actually bug is still there - changing unittest to main() does
not fix program, even if it seems to run correctly. The problem
with memory corruption is that it may happen with no observable
segfaults just because erroneous operation was performed on
memory which was permitted to be read/written.
Valgrind is tool which may show absence of memory corruption
errors. Giving your example:
Thanks! I see what you are saying in valgrind. However, the
following shows no problem in valgrind. Same code, only using S
instead of RefCounted!(int).
How could that be explained?
Note that both RefCount!() and your posted S have opAssign,
whereas the one below does not. Perhaps it is a problem only when
there exists a custom opAssign?
Thanks
Dan
---------
import std.typecons;
import std.stdio;
import pprint.pp;
struct S {
int x;
char[] c;
}
//alias RefCounted!(int) Foo;
alias S Foo;
Foo[int] map;
Foo f;
unittest {
int i=3;
map[i] = Foo();
}