If you declare one variable after another, you must not presume that they are contiguous in storage or even that the second variable is in storage after the first.
For example, in the following code, the storage allocated to the variable a may not immediately follow the storage allocated to the variable b, and hence the assignment could overlay 100 bytes of storage allocated to some other variable.
dcl a char(100);
dcl b char(100);
dcl c char(200) based;
addr(a)->c = '';
In fact, if the variable b is unused, the compiler will most likely allocate no storage to it!