Post by john-robinson on Limiting Memory Access of an Array to Within its Bounds
CODESYS Forge
talk
(Post)
Recently we had an issue regarding some simple code to calculate a rolling average. The code indexes from zero to 199 to properly store the current input into a circular buffer which then allows us to calculate a rolling average: VAR input_5s : REAL; outs_arr : ARRAY[0..199] OF REAL; i : USINT := 0; END_VAR ___ //this code runs every five seconds, calculating a rolling average outs_arr[i] := input_5s; i := i + 1; output := OSCAT_BASIC.ARRAY_AVG(ADR(outs_arr), SIZEOF(outs_arr)); IF i >= SIZEOF(outs_arr) THEN i := 0; END_IF There is a simple bug in this code where the index will be set to 0 when it has surpassed the length of the array in bytes (800 in this case) rather than larger than the number of reals in the array (200). The solution here is simple, replacing i >= SIZEOF(outs_arr) with i >= SIZEOF(outs_arr)/SIZEOF(outs_arr[0]). In this example when the index increased to 201 and the line outs_arr[201] := input_5s was called, codesys arbitrarily wrote to the address in memory that is where outs_arr[201] would be if the array was that long. I would like to find a way to wrap the codesys array inside of a wrapper class that checks if an input is within the bounds of an array before writing to that value. I know how I would implement that for a specific array, I could create a method or class that takes an input of an array of variable length, ie. ARRAY[*] OF REAL, but I don't know how to make this for any data type. I am wondering if anyone has ever done anything similar to this, or has any better suggestions to ensure that none of the programmers on this application accidentally create code that can arbitrarily write to other locations in memory.
Last updated: 2024-03-05
OPC UA Server limitations, large array crashes runtime
CODESYS Forge
talk
(Thread)
OPC UA Server limitations, large array crashes runtime
Last updated: 2023-08-23
Cancelling a selection from a "combobox array" in Visu
CODESYS Forge
talk
(Thread)
Cancelling a selection from a "combobox array" in Visu
Last updated: 2024-07-17
Length of string and Array of bytes
CODESYS Forge
talk
(Thread)
Length of string and Array of bytes
Last updated: 2025-04-02
Reset an Array[] in one line, possible?
CODESYS Forge
talk
(Thread)
Reset an Array[] in one line, possible?
Last updated: 2025-04-03
Variable Length Array - Cannot mix variable and fixed length dimensions?
CODESYS Forge
talk
(Thread)
Variable Length Array - Cannot mix variable and fixed length dimensions?
Last updated: 2025-05-26
Parameterized Property syntax for array element processing
CODESYS Forge
talk
(Thread)
Parameterized Property syntax for array element processing
Last updated: 2025-10-09
Codesys 2.3.9.28 Webvisu Tabelle mit Array 1..12,1..31 edit
CODESYS Forge
talk
(Thread)
Codesys 2.3.9.28 Webvisu Tabelle mit Array 1..12,1..31 edit
Last updated: 2012-05-11
Assign Initial Value of Array of Byte
CODESYS Forge
talk
(Thread)
Assign Initial Value of Array of Byte
Last updated: 2019-03-08
Array finding the total of index
CODESYS Forge
talk
(Thread)
Array finding the total of index
Last updated: 2023-03-03
Index was outside the bounds of the array
CODESYS Forge
talk
(Thread)
Index was outside the bounds of the array
Last updated: 2016-10-12
Mit UNION Bit-Array auf WORD verknüpfen
CODESYS Forge
talk
(Thread)
Mit UNION Bit-Array auf WORD verknüpfen
Last updated: 2016-09-09
Fehler: Falscher Index für Array! Aufrufhierarchie aufrufen
CODESYS Forge
talk
(Thread)
Fehler: Falscher Index für Array! Aufrufhierarchie aufrufen
Last updated: 2012-03-23
DINT adds 2 additional empty bytes in array/union
CODESYS Forge
talk
(Thread)
DINT adds 2 additional empty bytes in array/union
Last updated: 2021-10-12
Eingabe in die Visualisierung in ein Array
CODESYS Forge
talk
(Thread)
Eingabe in die Visualisierung in ein Array
Last updated: 2014-06-27
RUNTIME ERROR: Wrong array index! Please open callstack!
CODESYS Forge
talk
(Thread)
RUNTIME ERROR: Wrong array index! Please open callstack!
Last updated: 2016-03-20
Re: Exporting array data into Excel
CODESYS Forge
talk
(Thread)
Re: Exporting array data into Excel
Last updated: 2013-09-12
Übergabe von Array variabler Größe an FB / PRG
CODESYS Forge
talk
(Thread)
Übergabe von Array variabler Größe an FB / PRG
Last updated: 2007-08-24
wie kann ich ein Array ini mit EOF
CODESYS Forge
talk
(Thread)
wie kann ich ein Array ini mit EOF
Last updated: 2008-06-03
ARRAY finding specific value and its pocition /TwinCAT
CODESYS Forge
talk
(Thread)
ARRAY finding specific value and its pocition /TwinCAT
Last updated: 2019-11-26
Array mit Konstanten als Tabelle in der Visu dargestellt
CODESYS Forge
talk
(Thread)
Array mit Konstanten als Tabelle in der Visu dargestellt
Last updated: 2021-12-09
SysFileWrite schreibt nur 1sten Eintrag vom Array
CODESYS Forge
talk
(Thread)
SysFileWrite schreibt nur 1sten Eintrag vom Array
Last updated: 2017-06-11
Writing a CSV file from an array of values?
CODESYS Forge
talk
(Thread)
Writing a CSV file from an array of values?
Last updated: 2020-05-27
Daten eines DUTs in Array mit gleichen DUTs kopieren
CODESYS Forge
talk
(Thread)
Daten eines DUTs in Array mit gleichen DUTs kopieren
Last updated: 2008-09-30
External C code with an array with initial values?
CODESYS Forge
talk
(Thread)
External C code with an array with initial values?
Last updated: 2010-02-16
To search for an exact phrase, put it in quotes. Example: "getting started docs"
To exclude a word or phrase, put a dash in front of it. Example: docs -help
To search on specific fields, use these field names instead of a general text search. You can group with AND or OR.