On Mon, 14 Apr 2014 19:28:06 -0400, lzzll <[email protected]> wrote:
Looks like dangling point is not checked even in method mark as safe.
Example:
---
import std.stdio;
class A {
int value;
void set_value(int value) @safe {
this.value = value;
}
}
void test_safe(A a) @safe {
a.set_value(1);
}
int main(string[] args) {
A a = new A();
test_safe(a);
test_safe(null);
test_safe(*(&a+100));
writeln("done.");
return 0;
}
---
test_safe(null);
and
test_safe(*(&a+100));
will cause segmentation fault.
Safe cannot verify its inputs. main() is not marked as safe, therefore it
will not help.
But even so, dereferencing null is @safe, since it does not corrupt
memory. Your *(&a + 100) will definitely not compile if main is marked
@safe.
-Steve