![]() |
|
|
google unix.com
|
|||||||
| Fóruns | Registar | Fórum Regimento | Ligações | Álbuns | FAQ | Lista deputados | Calendário | Pesquisa | Today's Posts | Mark Forums Read |
| Alto Nível de programação Post perguntas sobre C, C + +, Java, SQL, e outras linguagens de programação aqui. |
Mais UNIX e Linux Fórum Tópicos Você pode achar Helpfull
|
||||
| Fio | Thread Starter | Fórum | Respostas | Última postagem |
| este script no crontab efeito domingo 9? | thepurple | Sun Solaris | 2 | 10-05-2007 05:31 |
| Desativar temporariamente efeito de "set-e em ksh | ugeek | Programação Shell Script e | 1 | 03-28-2007 05:21 |
| Como propriedades efeito script? | Chiefos | UNIX para Dummies Perguntas & Respostas | 1 | 06-21-2006 07:23 |
| Efeito da preferência do Kernel | sriram.ec | UNIX & avançada para usuários experientes | 2 | 03-15-2006 01:43 |
| recursivos efeito! | sskb | UNIX para Dummies Perguntas & Respostas | 2 | 01-30-2003 12:05 |
![]() |
|
|
Linkback | Thread Tools | Pesquisar este Thread |
Avaliação:
|
Display Modes |
|
|
|
||||
|
estranho efeito: se ... else em C influenciar uma afirmação anterior
Eu escrevo um código curto em c
ele pode funcionar bem, mas quando eu adiciono um se ... mais ... estrutura, um cálculo antes de a estrutura não pode dar um resultado correcto compilação e executar pode fazer bem, mas o resultado está errado. Muito estranho (1) y2 \u003d expressão; / / y2 \u003d 0 sempre 0 erro ................. acrescentar: "se (um-> is_root) m2 \u003d c - y2; else f \u003d m2 - y2; (2) y2 \u003d expressão; / / y2 \u003d 0 sempre 0 erro ................. acrescentar: "se (um-> is_root) m2 \u003d c - y2; if (! um-> is_root) f \u003d m2 - y2; (3) y2 \u003d expressão; / / y2 \u003d valor normal, normal ................. add: / / if (um-> is_root) m2 \u003d c - y2; if (! um-> is_root) f \u003d m2 - y2; (4) y2 \u003d expressão; / / y2 \u003d valor normal, normal ................. acrescentar: "se (um-> is_root) m2 \u003d c - y2; / / if (! um-> is_root) f \u003d m2 - y2; (5) y2 \u003d expressão; / / y2 \u003d valor normal, normal add: / / if (um-> is_root) m2 \u003d c - y2; / / if (! um-> is_root) f \u003d m2 - y2; Problema: não pode usar se ... mais ... normalmente Pergunta: (1) se ... mais ... pode influenciar uma declaração anterior, porquê? (2) Como resolver o problema? Última edição por cdbug; em 11/20/2008 05:38.. |
|
||||
|
Isso acontece em uma grande função, que possui um algoritmo relativamente complicado.
Basta falar, sua estrutura é, como tal: ___________________________________________________________ noções básicas de cálculo ------------------------------ y \u003d expressão; ------------------------------- ____________________________________________________________ algumas operações -------------------------------- -------------------------------- if ( bloco 1; ) else ( if (bloco 2;) else (bloco 3;) ) A estrutura dos blocos 2 e 3 vão mudar a maneira em que y é calculado. O resultado está errado. Eu verificar através gdb. Os cinco acima são os resultados obtidos, no mesmo ambiente, excepto para as mudanças nos dois blocos Em muitas execuções, y é sempre igual a 0. Caso contrário, será muito maior do que um certo valor. Mas quando uma ou cada um dos dois blocos é removida, y irá obter um valor normal. Eu não posso compreender |
|
||||
|
O único problema aqui é possível que block2 ou block3 estão transbordando uma variável em função da sua pilha e seu y var está sendo mudado.
Uma função da pilha é composto (crescimento de muita memória para pouca memória), por variáveis (em ordem inversa), eip, esp, Nome e função esp. Aqui está um exemplo simples para a sua eventual situação: Código:
void of()
{
char a[10];
char b[10];
strcpy (a, "aaaaaaaaaa");
printf ("%s\n", a);
strcpy(b, "bbbbbbbbbboverflow");
printf ("%s\n", a);
}
void
main ()
{
of();
}
|
|
||||
|
O valor é atribuído ao enganado quando executar y 'y \u003d expressão; "
no gdb, "py" irá dar o valor enganado após runing a declaração acima. mas' p expressão "dá direito ao valor. block2 e block3 são assim: if (um-> is_root) m2 \u003d c - y2; else f \u003d m2 - y2; Como disse antes: apenas uma indicação: se (um-> is_root) m2 \u003d c - y2; / / y2 normal apenas uma declaração: if (! um-> is_root) f \u003d m2 - y2; / / y2 normal mas: if (um-> is_root) m2 \u003d c - y2; else f \u003d m2 - y2; ou if (um-> is_root) m2 \u003d c - y2; if (! um-> is_root) f \u003d m2 - y2; quer fazer y2 anormal. »y2 \u003d expressão 'está longe de if__ outra estrutura __ Obrigado pelo seu ensino Última edição por cdbug; em 11/23/2008 04:28.. |
![]() |
| Marcadores |
| Thread Tools | Pesquisar este Thread |
| Display Modes | Esta taxa Thread |
|
|