. Сходу мне это видится как серьёзная проблема, которая не имеет простого решения. Притом присущая всем реализациям Оберона. И конечно же эта проблема есть и в BlackBox.
i think we have to add a warning (because as i understand it is not required to throw an error by oberon report) for this case, when returning a pointer to a local variable:
Код:
MODULE test;
IMPORT Out;
TYPE
arr = ARRAY 16 OF CHAR;
string = POINTER TO arr;
PROCEDURE str(): string;
VAR
a: arr;
s: string;
BEGIN
a := "aaa";
s^ := a;
RETURN s;
END str;
PROCEDURE main;
VAR st: string;
BEGIN
st := str();
Out.String(st^); Out.Ln;
END main;
it happens when main is called and Out.String is called with the s^ which points to the unexisting location in the stack segment. therefore - segmentation fault, it tried to access memory it should not.
what i thought is - I would like to make a warning at the line
RETURN s;
because s is a pointer to variable allocated on stack.
when we get out of that function stack pointer changes back. and the memory pointer points to is inaccessible
so Oberon pointer should only point to the area allocated on heap with NEW, and that kind of error I wanted to illustrate is not possible in Oberon.
on the other hand, should we make a warning when there is an assignment to an unallocated pointer?
I will try several compilers, and will think of solutions.