[Prévia] [Próxima] [Prévia por assunto] [Próxima por assunto]
[Índice cronológico]
[Índice de assunto]
Re: Problemas e Crítica
- Subject: Re: Problemas e Crítica
- From: Giuliano Mega <megag@terra.com.br>
- Date: Fri, 04 May 2001 13:58:37 -0300
> O seu exemplo não se aplica a um compilador que siga fielmente as normas da
> linguagem C
>
> Ah, se aplica, sim!
>
> >Por exemplo, no meu ep1 de 110 que tinha que fazer um grafo, dava um
> problema em um if(a[i - 1] = 'a' || i < 0) dava segmentation por que
Fora que isto aqui tem um resultado completamente aleatório
a[-1] = *(a-1); ou seja, tome o endereço apontado por 'a' menos uma
quantidade de bytes correspondente ao tipo do ponteiro. Isso pode tanto
resultar
num GPF (se 'a-1' estiver zona de memória protegida - pelo windows - de
algum
programa) quanto pode dar em nada. Se for uma leitura, você pode ler
lixo, se
for uma operação de gravação, você grava num local não alocado; ou seja,
corre o
risco de perder as informações lá gravadas. Em nenhum desses casos o
problema é
do sistema operacional e sim do seu programa.
> Aliás, ainda bem! É preciso poder contar com isso. Se eu faço, por
> exemplo,
>
> if (A && B && C)
>
> eu quero ter *certeza* de que C só vai ser evaluada se A e B forem ambas
> verdadeiras. Em C e C++, das duas uma: ou se conhece as regras com exatidão,
> ou é melhor adotar uma programação mais defensiva...
>
> Sinceramente, não acredito que compiladores do gabarito do gcc, g++ *ou*
> gpp tenham defeitos básicos. Provavelmente, algum uso não muito seguro ou um
> caso especial provoca estes erros "estranhos". Dá para contar nos dedos (de
> uma mão só) as vezes em que aparecem erros de verdade em compiladores
> profissionais (tirando aqueles mais esotéricos, claro)...
>
> Rubens