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();
}

Reply via email to