[C#] Ciclo FOR a ignorar condição de execução

rastiff

Suspenso
Viva a todos,

Deparei-me com um bug invulgar e estou a tentar perceber porque é que tal acontece. (é extremamente ocasional)

Estou a tentar perceber como é que é possível o seguinte ciclo

Código:
for (int i = 0; i < myArray.Length; i++)
{
   //code
}

ser executado quando i<myArray.Length é falso.

Ideias sobre o que pode estar a acontecer?
 
Hm tens mesmo de mostrar o codigo todo, porque mesmo que o length do array seja 0, nao devia correr, porque tens o < , para isso acontecer era se tivesses o <=
E sera que faz sentido teres a mesma variavel a subir e na condicao?
 
@dagas46 @Digo Digo @xbostonx

eu já ando nisto há alguns anitos e estou convosco sobre ser impossível, daí lhe chamar "bug". Queria era perceber melhor em que contexto poderia isto ter acontecido.

Não posso revelar o código todo mas de qualquer das formas o resto do código deverá ser irrelavante para a questão que é o impossível estar a acontecer.
Vejam a imagem abaixo e reparem que eu estou a fazer debug ao valor da condição de execução do FOR que naquele caso é false. E reparem que entrou na mesma no ciclo (eu apanhei esta situação porque apanhei uma excepção na linha a amarelo - phaseFreq tem o mesmo tamanho de omegas_algo e, portanto, já não tinha posição i onde escrever).

IMG_20180428_085950.jpg
 
Não estás a utilizar tasks ou threads no código? Não há a possibilidade de ao verificar a condição no for ser verdadeiro e depois tornar-se falso?

phaseFreq e omegas_algo não têm o mesmo tamanho. Se tivessem a excepção era lançada na primeira instrução dentro do for e não na segunda
 
Última edição:
@dagas46
ao bocado depois de fazer o post com a imagem quando estava a rever o texto e a imagem veio-me isso mesmo à cabeça!
Na 2ª feira vou confirmar mas à primeira vista (não fui eu que desenvolvi esta parte do código) creio que não.
Isto aconteceu uma vez em mais de 20 mil execuções daquele código nos últimos 2 dias. :paranoid: Muito estranho.
Mas se de facto aquele código estiver a correr em mais do que uma thread sem qualquer protecção é possível que seja como referes. Sendo um conjunto muito pequeno de instrucções todas de rápida execução bateria certo com a probabilidade de ocorrência do problema ser mais baixa ainda que 1:20000.

@mcog_blaster
Se for um problema como o @dagas46 referiu é possível que tenha acontecido entre a execução das duas linhas que referes.


Deixem confirmar na 2ª e eu depois dou feedback!
Entretanto, obrigado a todos. :beerchug:
 
Back
Topo