none
Díganme por favor, ayúdenme, ¿a qué se debe este error? RRS feed

Respuestas

  • El remedio es no hacerlo. Es decir, no debes escribir dentro de una subrutina una llamada a sí misma, a no ser que expresamente estés escribiendo un programa recursivo en el que antes de hacer la llamada se compruebe la condición de terminación para que la recursión no sea infinita.

    Si lo piensas bien, no tiene sentido. Es decir, en una subrutina que sirve para "HacerAlgo" no puedes ponerle dentro que la forma de hacerlo es "HacerAlgo". Se volvería a meter en HacerAlgo, y eso implica HacerAlgo, y eso a su vez llama a HacerAlgo, y así sucesivamente, nunca se termina hasta que da un error. En consecuencia, no pongas "HacerAlgo" dentro de una subrutina llamada "HacerAlgo".

    miércoles, 30 de noviembre de 2016 21:50

Todas las respuestas

  • El StackOverflowException casi siempre se debe a una recursividad mal hecha. Es decir, una subrutina que directa o indirectamente se llama a sí misma sin ningún control que interrumpa esas llamadas, con lo que se mete en un bucle infinito hasta que la pila se desborda.

    Por ejemplo, en tu caso concreto tienes un método llamado AddPedido que está ubicado en la clase DPedido. Y por dentro llama a DPedido.AddPedido, que resulta ser precisamente el mismo método. Con lo que se mete en un bucle infinito de rellamadas a sí mismo hasta producir el desbordamiento. En otros casos también puede ocurrir indirectamente, cuando un método A llama al método B y el B llama al A.

    martes, 29 de noviembre de 2016 20:19
  • Okey, gracias por la explicación, y dime, Alberto, ¿cuál sería la solución para este caso?
    • Editado persiano132 miércoles, 30 de noviembre de 2016 16:31
    miércoles, 30 de noviembre de 2016 16:26
  • El remedio es no hacerlo. Es decir, no debes escribir dentro de una subrutina una llamada a sí misma, a no ser que expresamente estés escribiendo un programa recursivo en el que antes de hacer la llamada se compruebe la condición de terminación para que la recursión no sea infinita.

    Si lo piensas bien, no tiene sentido. Es decir, en una subrutina que sirve para "HacerAlgo" no puedes ponerle dentro que la forma de hacerlo es "HacerAlgo". Se volvería a meter en HacerAlgo, y eso implica HacerAlgo, y eso a su vez llama a HacerAlgo, y así sucesivamente, nunca se termina hasta que da un error. En consecuencia, no pongas "HacerAlgo" dentro de una subrutina llamada "HacerAlgo".

    miércoles, 30 de noviembre de 2016 21:50