<div dir="ltr"><div>A propósito del tema planteado por Juan M. Puertas y el aporte realizado por Jesus Reyes A.</div><div>Me ha llamado la atención el uso de la función SetLength en la función vbSplit.</div><div><div>function vbSplit(S: string; Delimiter: char): TStrArray;</div><div>var</div><div>  C: integer;</div><div>begin</div><div>  repeat</div><div>    SetLength(Result, Length(Result) + 1);</div><div>    C := Pos(Delimiter, S);</div><div>    if C = 0 then</div><div>      C := Length(S) + 1;</div><div>    Result[Length(Result) - 1] := Copy(S, 1, C - 1);</div><div>    Delete(S, 1, C);</div><div>  until Length(S) = 0;</div><div>end;</div></div><div><br></div><div>Yo creo que en esa función el programador asumió que SetLength siempre expandirá el array.</div><div>Según mis pocos conocimientos para que eso sea posible, en tiempo de compilación, se debería reservar una cantidad importante de memoria contigua para el posible crecimiento de cada array dinamico que el programador declare o </div><div>implementar en SetLength una opción para mover el array a otra zona si no hay espacio disponible.</div><div>en C se resolvería llamando a realloc</div><div><br></div><div>pero en la documentación no entiendo eso. yo entiendo que se debe llamar _una vez_ a SetLength con un valor mayor a cero y otra vez con valor igual a cero si se desea borrar los datos del array.</div><div><a href="http://www.freepascal.org/docs-html/rtl/system/setlength.html">http://www.freepascal.org/docs-html/rtl/system/setlength.html</a></div><div><br></div><div>¿qué opinan uds?</div><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature">Rafael Bidegain<br><br>Ya que los cuerdos no hablan, hablará el loco.<br>(The Fool, Padraic Pearse)<br><br># yo quiero educación libre. ¡YA!<br><br></div>
</div>