The UNIX and Linux Forums  

Go Back   O UNIX e Linux Forum > Top Fóruns > Alto Nível de programação
.
google unix.com



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

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
Linkback Thread Tools Pesquisar este Thread Avaliação: Thread Rating: 1 votes, 2.00 average. Display Modes
  #1 (permalink)  
Old 11-20-2008
cdbug cdbug is offline
Usuário
  
 

Join Date: Oct 2008
Lugares: 52
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..
  #2 (permalink)  
Old 11-20-2008
temível redoubtable is offline
Usuário
  
 

Join Date: Aug 2008
Localização: Portugal
Lugares: 242
Seria útil se você poderia fornecer um exemplo de compilável o seu problema.
  #3 (permalink)  
Old 11-20-2008
cdbug cdbug is offline
Usuário
  
 

Join Date: Oct 2008
Lugares: 52
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
  #4 (permalink)  
Old 11-20-2008
jlliagre jlliagre is offline Forum Advisor  
sıɹɐlosuǝdo ɹǝsn
  
 

Join Data: dezembro 2007
Localização: Paris
Mensagens: 1.444
Eu tenho medo sua descrição do problema dar nenhuma pista.
Sem uma compilável exemplo, ninguém vai adivinhar o que está errado com seu código.
  #5 (permalink)  
Old 11-21-2008
temível redoubtable is offline
Usuário
  
 

Join Date: Aug 2008
Localização: Portugal
Lugares: 242
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();
}
Como você será capaz de ver, a variável b transborda em variável a.
  #6 (permalink)  
Old 11-23-2008
cdbug cdbug is offline
Usuário
  
 

Join Date: Oct 2008
Lugares: 52
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..
  #7 (permalink)  
Old 11-23-2008
temível redoubtable is offline
Usuário
  
 

Join Date: Aug 2008
Localização: Portugal
Lugares: 242
Hum! Que tipo de var é y2? Qual é o expressão que lhe é atribuído? Existem várias coisas que realmente pode causar que isso é um pouco difícil para ajudá-lo sem a plena compilável código.
Closed Thread

Marcadores

Thread Tools Pesquisar este Thread
Pesquisar este Thread:

Pesquisa Avançada
Display Modes Esta taxa Thread
Esta taxa Thread:

Destacamento Regimento
Você não pode postar novas threads
Você não pode postar respostas
Você não pode postar anexos
Você não pode editar suas postagens

BB code é Ligado
Smilies são Ligado
[IMG] código é Ligado
Código HTML é Desligado
Trackbacks são Ligado
Pingbacks são Ligado
Refbacks são Ligado




Todos os horários são GMT -4. A hora é agora 02:28.


Powered by: vBulletinCopyright © 2000 - 2006, Jelsoft Enterprises Limited. Língua Traduções Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
O UNIX e Linux Fóruns Content Copyright © 1993-2009. Todos os Direitos Reserved.Ad Gestão por RedTyger

Content Relevant URLs por vBSEO 3.2.0