Re: allocation error




Beliavsky wrote:
dpb wrote:
Richard Maine wrote:
lane straatman <grumpy196884@xxxxxxxxxxx> wrote:

allocate(pascal(1:n))
write (*,'(a)', advance='no') 'give me an int'
read (*, '(i3)') n
...
*** Error 112, Reference to undefined variable, array element or
function result (/UNDEF)

That's because your allocate is before you read the value of n. Allocate
is an executable statement. It does its thing when it is executed, which
in this case is before n is defined. My guess is that you are thinking
it does something more complicated like make the array size track the
value of n as n changes. Nope, it is much simpler than that.

Question, Richard--would the use of a STAT variable if it had been used
(and subsequently tested, of course) been required to catch this
particular error? Or is the undefined status of n a non-required error
to be caught?

The following does not directly answer your question.

I have made the OP's error of allocating an array to a size specified
by a variable that has not been set. What typically happens is that "n"
is randomly set to some very large value, causing the ALLOCATE to fail
and the program to crash (I don't use a STAT with the ALLOCATE). For me
this works well, since I quickly notice the bug and fix it.

I retract the question on looking more closely at the original post --
I first mistakenly thought the error didn't refer to the ALLOCATE()
line, but the later reference. When I re-read the actual posted error
including the line number, I see the error/stop was associated with the
failure of ALLOCATE so the STAT variable would have returned non-zero.

I guess a related question that I could try but don't have the compiler
handy just now is whether if the particular compiler does initialize n
to zero, does the zero-extent array constitute and error or is that
(I'm sorta' presuming) ok. The case you mention of a large, but
positive random value failing for lack of memory I see.

.



Relevant Pages

  • Re: Legacy alloc on 64 Bit system
    ... machine using the Protland compiler suite. ... The allocate routine takes a ... array to the allocated space. ... I don't speak for Intel, ...
    (comp.lang.fortran)
  • Re: allocating arrays, trouble
    ... Is this a compiler issue or just prohibited in Fortran 90? ... The array b in the following fragment is a so-called ... The program must allocate the memory for this array at ...
    (comp.lang.fortran)
  • Re: Overloading OPERATOR(+): my usage causing memory leaks.
    ... Imemory leaks when apply it to array arguments. ... I'd guess it to be a compiler bug, and I can even roughly guess where. ... assignment, but it seems a good candidate for something some compilers ... where a and b are derived types with allocatable components, the compiler should allocate ...
    (comp.lang.fortran)
  • Re: Cons cell archaic!?
    ... from s-expression or XML or other syntax you keep the bloated array ... For using vectors to emulate lists that ... Allocate 2, move 1 element: ... What do you think of that algorithm? ...
    (comp.lang.lisp)
  • Re: INTENT(WORKSPACE) as a new Fortran feature?
    ... >> the array once in the caller than each time within the subroutine. ... > the stack pointer is being changed to allocate local variables in any ... "actual" memory would never be touched at all. ... If, on a particular machine, the compiler knows that it would be ...
    (comp.lang.fortran)