Which ColdFusion version?
"This e-mail is from Reed Exhibitions (Oriel House, 26 The Quadrant, Richmond, Surrey, TW9 1DL, United Kingdom), a division of Reed Business, Registered in England, Number 678540. It contains information which is confidential and may also be privileged. It is for the exclusive use of the intended recipient(s). If you are not the intended recipient(s) please note that any form of distribution, copying or use of this communication or the information in it is strictly prohibited and may be unlawful. If you have received this communication in error please return it to the sender or call our switchboard on +44 (0) 20 89107910. The opinions expressed within this communication are not necessarily those expressed by Reed Exhibitions." Visit our website at http://www.reedexpo.com -----Original Message----- From: Susan McNab To: CF-Talk Sent: Mon Aug 07 03:18:50 2006 Subject: CF Arrays I was getting an error that appeared to be randomly occurring in one of my sites: "The element at position [n] cannot be found" Eventually I traced it to the fact that I had been using ArrayLen to set the number of iterations for a loop when the array size had been expanding. The code was therefore trying to reference empty array elements and causing the error. I knew that CF arrays are "dynamic" and that they can therefore sometimes expand beyond the minimum number of elements needed. I thought I had been careful about that though. I realise now that I need to know more about the internal mechanics of CF arrays. What tripped me up was that the array was expanding because an IF statement referred to an outer dimensional array element that was greater than the original array size. The same thing happens with cfoutput and possibly other actions that you would expect to generate an error, but not to change the bounds of the array. This does not happen with one dimensional arrays, or the inner dimensions of 2D arrays. With both single and multidimensional arrays an error is generated when you first make an out of bounds reference to the array. That is what you want, but why should expanded array elements then persist in memory in the case of multidimensional arrays? Why should CF need to create extra elements for this? It was pretty easy to find a way to cope with the problem in my application, but I wondered wether this behaviour is correct, and why it has to be this way. In my case I had been using some multidimensional arrays in application scope so there was a risk of expanded array sizes eventually affecting performance. Does any one know what's going on under the hood here? The code below shows illustrates the effect simply: <cfset application.a2DArray = ArrayNew(2)> <cfset application.a2DArray[1][1] = "data11"> <cfset application.a2DArray[1][2] = "data12"> <cfset application.a2DArray[2][1] = "data21"> <cfset application.a2DArray[2][2] = "data22"> <!--- Dump array with 2 x 2 elements ---> <cfdump label="application.a2DArray" var="#application.a2DArray#"> <cftry> <cfif application.a2DArray[4][2] eq "something">You would expect this to generate an error but not to change the array size</cfif> <cfcatch type="Any"> <cfoutput>#cfcatch.message#</cfoutput> </cfcatch> </cftry> <!--- Array now has with 2 x 2 two elements plus 2 new empty elements ---> <cfdump label="application.a2DArray" var="#application.a2DArray#"> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~| Introducing the Fusion Authority Quarterly Update. 80 pages of hard-hitting, up-to-date ColdFusion information by your peers, delivered to your door four times a year. http://www.fusionauthority.com/quarterly Archive: http://www.houseoffusion.com/groups/CF-Talk/message.cfm/messageid:248973 Subscription: http://www.houseoffusion.com/groups/CF-Talk/subscribe.cfm Unsubscribe: http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=89.70.4

