The UNIX and Linux Forums  


Go Back   UNIX e Linux Forum > Inizio Forum > Di programmazione ad alto livello
.
google unix.com



Di programmazione ad alto livello Pubblica domande su C, C + +, Java, SQL, e di altri linguaggi di programmazione qui.

Più di UNIX e Linux Forum Argomenti potreste trovare utili
Filo Thread Starter Forum Risposte Ultimo Post
sarà questo script crontab in vigore domenica 9? thepurple SUN Solaris 2 10-05-2007 05:31 AM
Disattivare temporaneamente l'effetto di set-e in ksh ugeek Shell scripting e di programmazione 1 03-28-2007 05:21 AM
Come effetto script di proprietà? Chiefos UNIX for Dummies Domande & Risposte 1 06-21-2006 07:23 AM
Effetto del kernel preemptive sriram.ec UNIX e avanzata per utenti esperti 2 03-15-2006 01:43 AM
ricorsive effetto! sskb UNIX for Dummies Domande & Risposte 2 01-30-2003 12:05 PM

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 Cerca in questo Thread Rating: Thread Rating: 1 votes, 2.00 average. Modalità di visualizzazione
  #1 (permalink)  
Old 11-20-2008
cdbug cdbug is offline
Utente Registrato
  
 

Iscriviti Data: ottobre 2008
Interventi: 52
strano effetto: se ... altro in C influenza di una precedente dichiarazione

Scrivere un breve codice in C

può funzionare bene, ma quando aggiungere un se ... altro ... struttura, una prima struttura di calcolo non può dare un risultato corretto

compilazione e la gestione possono fare bene, ma il risultato è sbagliato. Molto strano

(1)
y2 \u003d espressione; / / y2 \u003d 0 sempre 0 errore
.................

aggiungere: se (a-> is_root, lettera c) \u003d m2 - y2;
else f \u003d m2 - y2;


(2)

y2 \u003d espressione; / / y2 \u003d 0 sempre 0 errore
.................

aggiungere: se (a-> is_root, lettera c) \u003d m2 - y2;
if (! a-> is_root) f \u003d m2 - y2;


(3)
y2 \u003d espressione; / / y2 \u003d valore normale, normale
.................

aggiungere: / / if (a-> is_root, lettera c) \u003d m2 - y2;
if (! a-> is_root) f \u003d m2 - y2;


(4)

y2 \u003d espressione; / / y2 \u003d valore normale, normale
.................

aggiungere: se (a-> is_root, lettera c) \u003d m2 - y2;
/ / if (! a-> is_root) f \u003d m2 - y2;

(5)
y2 \u003d espressione; / / y2 \u003d valore normale, normale

aggiungere: / / if (a-> is_root, lettera c) \u003d m2 - y2;
/ / if (! a-> is_root) f \u003d m2 - y2;

Problemi: non può essere utilizzato se ... altro ... normalmente

Domanda: (1), se ... altro ... possono influenzare una precedente dichiarazione, perché?
(2) Come risolvere il problema?

Ultimo a cura di cdbug; al 11/20/2008 05:38 AM..
  #2 (permalink)  
Old 11-20-2008
redoubtable redoubtable is offline
Utente Registrato
  
 

Join Date: Aug 2008
Posizione: Portogallo
Interventi: 242
Sarebbe utile se potesse fornire un esempio di compilabile il problema.
  #3 (permalink)  
Old 11-20-2008
cdbug cdbug is offline
Utente Registrato
  
 

Iscriviti Data: ottobre 2008
Interventi: 52
Questo accade in una grande funzione, che ha un algoritmo relativamente complicato.

Basta parlare, la sua struttura è in quanto tale:
___________________________________________________________
alcune conoscenze di base di calcolo
------------------------------

y \u003d espressione;

-------------------------------
____________________________________________________________
alcune operazioni
--------------------------------

--------------------------------

se (
blocco 1;
)

else (
se (blocco 2;)
else (blocco 3;)
)

La struttura dei blocchi 2 e 3, cambierà il modo in cui y è calcolato. Il risultato è sbagliato. Verificare attraverso gdb. I cinque risultati di cui sopra sono disponibili presso lo stesso ambiente, ad eccezione per le modifiche in due blocchi

In molte esecuzioni, y è sempre uguale a 0. In caso contrario, sarà molto più grande di un valore giusto.

Ma quando uno o di ciascuno dei due blocchi è stato rimosso, e si ottiene un valore normale.

Non riesco a capire
  #4 (permalink)  
Old 11-20-2008
jlliagre jlliagre is online now Forum Advisor  
ɹǝsn sıɹɐlosuǝdo
  
 

Iscriviti Data: dicembre 2007
Ubicazione: Parigi
Messaggi: 1.468
Temo che la tua descrizione del problema, non danno indizio.
Senza un compilabile esempio, nessuno è in corso di indovinare ciò che è sbagliato con il tuo codice.
  #5 (permalink)  
Old 11-21-2008
redoubtable redoubtable is offline
Utente Registrato
  
 

Join Date: Aug 2008
Posizione: Portogallo
Interventi: 242
L'unica situazione possibile è che block2 o block3 sono traboccante di una variabile sulla funzione della pila e la tua y var è cambiato.

Una funzione della pila è composta (in crescita dal basso di memoria ad alta memoria) da variabili (in ordine inverso), EIP, esp, Nome di funzione e esp.

Ecco un semplice esempio per la tua situazione possibile:

Codice:
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();
}

Come si sarà in grado di vedere, variabile b overflow in variabile a.
  #6 (permalink)  
Old 11-23-2008
cdbug cdbug is offline
Utente Registrato
  
 

Iscriviti Data: ottobre 2008
Interventi: 52
L'errata valore è assegnato ad eseguire quando y 'y \u003d espressione;'

in gdb, 'py' darà il valore errato runing dopo la dichiarazione di cui sopra.

ma 'p espressione' dà il giusto valore.

block2 e block3 sono come questo:

if (a-> is_root, lettera c) \u003d m2 - y2;
else f \u003d m2 - y2;

Come detto in precedenza:
una sola dichiarazione: se (a-> is_root, lettera c) \u003d m2 - y2; / / y2 normale
una sola dichiarazione: if (! a-> is_root) f \u003d m2 - y2; / / y2 normale

ma:

if (a-> is_root, lettera c) \u003d m2 - y2;
else f \u003d m2 - y2;

o

if (a-> is_root, lettera c) \u003d m2 - y2;
if (! a-> is_root) f \u003d m2 - y2;

y2 fare entrambe le anomalie. 'y2 \u003d espressione' è lontano da if__ altro __ struttura

Grazie per il tuo insegnamento

Ultimo a cura di cdbug; al 11/23/2008 04:28 AM..
  #7 (permalink)  
Old 11-23-2008
redoubtable redoubtable is offline
Utente Registrato
  
 

Join Date: Aug 2008
Posizione: Portogallo
Interventi: 242
Hum! Che tipo di var è y2? Qual è il espressione ad essa assegnati? Ci sono davvero molte cose che possono causare che così è un po 'difficile aiutarti senza la piena compilabile codice.
Closed Thread

Segnalibri

Thread Tools Cerca in questo Thread
Cerca in questo Thread:

Ricerca Avanzata
Modalità di visualizzazione Vota questo thread
Vota questo thread:

Distacco regolamento
Tu non può post nuovo thread
Tu non può inviare una risposta
Tu non può postare allegati
Tu non può modificare i tuoi post

BB codice è Su
Smilies sono Su
[IMG] codice Su
Codice HTML è Chiuso
Trackbacks sono Su
Pingbacks sono Su
Refbacks sono Su




Tutti gli orari sono GMT -4. La data di oggi è 07:42 AM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Traduzioni Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX e Linux Forum Content Copyright © 1993-2009. Tutti i diritti Reserved.Ad di gestione da RedTyger

Contenuti pertinenti URL da vBSEO 3.2.0