Re: allocation error
- From: Rich Townsend <rhdt@xxxxxxxxxxxxxxxxxxx>
- Date: Fri, 29 Dec 2006 14:34:27 -0500
dpb wrote:
Beliavsky wrote:
dpb wrote:
Richard Maine wrote:The following does not directly answer your question.
lane straatman <grumpy196884@xxxxxxxxxxx> wrote:Question, Richard--would the use of a STAT variable if it had been used
allocate(pascal(1:n))...
write (*,'(a)', advance='no') 'give me an int'
read (*, '(i3)') n
*** Error 112, Reference to undefined variable, array element orThat's because your allocate is before you read the value of n. Allocate
function result (/UNDEF)
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.
(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?
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.
Not necessarily. As soon as an undefined variable (in this case, n) is
referenced, all bets are off. Then, the consequence of the ALLOCATE can
potentially be anything -- no error, crash, reboot machine -- regardless of the
presence or absence of STAT. In this respect, Beliavsky's response is a little
misleading.
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.
Again, if n is not properly initialized, then it's not really meaningful to ask
what the result will be.
But it *is* perfectly legal to allocate an array with size 0 -- so if one
initialized n to zero, then the allocate statement would be quite valid.
cheers,
Rich
.
- References:
- allocation error
- From: lane straatman
- Re: allocation error
- From: Richard Maine
- Re: allocation error
- From: dpb
- Re: allocation error
- From: Beliavsky
- Re: allocation error
- From: dpb
- allocation error
- Prev by Date: Re: allocation error
- Next by Date: Re: allocation error
- Previous by thread: Re: allocation error
- Next by thread: Re: allocation error
- Index(es):
Relevant Pages
|