The UNIX and Linux Forums  
Hei og Velkommen fra USA til UNIX og Linux Forums! Takk for besøket og Delta i vårt globale samfunn.

Go Back   UNIX og Linux Forums > Top Forums > High Level Programmering
.
google unix.com



High Level Programmering Post spørsmål om C, C + +, Java, SQL og andre programmeringsspråk her.

Mer UNIX og Linux Forum Emner Du kan finne nyttig
Tråd Tråd startet Forum Svar Siste innlegg
vil dette skriptet i crontab effekt søndag 9? thepurple Sun Solaris 2 10-05-2007 04:31
Midlertidig deaktivere effekten av set-e i ksh ugeek Shell programmering og Skripting 1 03-28-2007 04:21
Hvordan egenskapene effekt script? Chiefos UNIX for Dummies Spørsmål og svar 1 06-21-2006 06:23
Effekt av Preemptive Kernel sriram.ec UNIX for Advanced & ekspertbrukere 2 03-15-2006 01:43
Rekursiv effekt! sskb UNIX for Dummies Spørsmål og svar 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 Søk i denne tråden Vurdering: Thread Rating: 1 votes, 2.00 average. Visningsmoduser
  #1 (permalink)  
Old 11-20-2008
cdbug cdbug is offline
Registrert bruker
  
 

Bli Dato: Oct 2008
Innlegg: 52
merkelig effekt: hvis ... else in C påvirke en tidligere uttalelse

Jeg skriver en kort kode i C

det kan fungere bra, men når jeg legger til en hvis ... else ... struktur, en beregning før strukturen kan ikke gi et riktig resultat

kompilering og løpe kan gjøre det bra, men resultatet er feil. Veldig rart

(1)
y2 \u003d uttrykk; / y2 \u003d 0 alltid 0-feil
.................

add: if (a-> is_root) c \u003d m2 - y2;
else f \u003d m2 - y2;


(2)

y2 \u003d uttrykk; / y2 \u003d 0 alltid 0-feil
.................

add: if (a-> is_root) c \u003d m2 - y2;
if (! a-> is_root) f \u003d m2 - y2;


(3)
y2 \u003d uttrykk; / y2 \u003d normal verdi; normal
.................

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


(4)

y2 \u003d uttrykk; / y2 \u003d normal verdi; normal
.................

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

(5)
y2 \u003d uttrykk; / y2 \u003d normal verdi; normal

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

Trouble: kan ikke bruke hvis ... else ... normalt

Spørsmål: (1) hvis ... else ... kan påvirke en tidligere uttalelse, hvorfor?
(2) Hvordan løse problemet?

Sist endret av cdbug; 11-20-2008 kl 05:38..
  #2 (permalink)  
Old 11-20-2008
fryktinngytende redoubtable is offline
Registrert bruker
  
 

Bli Dato: Aug 2008
Beliggenhet: Portugal
Innlegg: 242
Det ville være nyttig om du kunne gi en compilable eksempel på problemet.
  #3 (permalink)  
Old 11-20-2008
cdbug cdbug is offline
Registrert bruker
  
 

Bli Dato: Oct 2008
Innlegg: 52
Dette skjer i en stor funksjon, som har en relativt komplisert algoritme.

Bare sett er strukturen som sådan:
___________________________________________________________
noen grunnleggende beregning
------------------------------

y \u003d uttrykk;

-------------------------------
____________________________________________________________
noen operasjoner
--------------------------------

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

hvis (
blokk 1;
)

else (
hvis (blokk 2;)
else (block 3;)
)

Strukturen av blokkene 2 og 3 vil endre måten y er beregnet. Resultatet er galt. Jeg merker det gjennom gdb. De fem Resultatene ovenfor er hentet på samme miljøet bortsett fra endringene i de to blokkene

I mange henrettelser, y er alltid lik 0.. Ellers vil det være langt større enn en riktig verdi.

Men da enten eller hver av de to blokkene er fjernet, y vil få en normal verdi.

Jeg kan ikke forstå
  #4 (permalink)  
Old 11-20-2008
jlliagre jlliagre is offline Forum Advisor  
ɹǝsn sıɹɐlosuǝdo
  
 

Bli Dato: desember 2007
Sted: Paris
Innlegg: 1390
Jeg er redd din beskrivelse av problemet gir ingen anelse.
Uten en compilable eksempel, ingen kommer til å gjette hva som er galt med koden din.
  #5 (permalink)  
Old 11-21-2008
fryktinngytende redoubtable is offline
Registrert bruker
  
 

Bli Dato: Aug 2008
Beliggenhet: Portugal
Innlegg: 242
Den eneste mulige Situasjonen her er at block2 eller block3 er overfylte en variabel på funksjon stack og dine y var blir endret.

En funksjon stack er sammensatt (vokser fra høy minne til lite minne) ved variabler (i motsatt rekkefølge), EIP, esp, Funksjon navn og esp.

Her er et enkelt eksempel for mulige situasjon:
Code:
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();
}
Som du vil kunne se, variabel b overflows inn variable a.
  #6 (permalink)  
Old 11-23-2008
cdbug cdbug is offline
Registrert bruker
  
 

Bli Dato: Oct 2008
Innlegg: 52
Den forveksles verdien er tildelt y når execute "y \u003d uttrykk;"

i gdb, vil "py" gi feil verdi etter runing ovenstående uttalelse.

men 'p uttrykket' gir rett verdi.

block2 og block3 er slik:

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

Som sagt før:
kun én setning: if (a-> is_root) c \u003d m2 - y2; / / y2 normal
kun én setning: if (! a-> is_root) f \u003d m2 - y2; / / y2 normal

men:

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

eller

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

gjør begge Y2 unormal. 'y2 \u003d uttrykket' er langt unna if__ annet __ struktur

Takk for undervisning din

Sist endret av cdbug; 11-23-2008 kl 04:28..
  #7 (permalink)  
Old 11-23-2008
fryktinngytende redoubtable is offline
Registrert bruker
  
 

Bli Dato: Aug 2008
Beliggenhet: Portugal
Innlegg: 242
Hum! Hva slags var er y2? Hva er uttrykk tilordnet det? Det er egentlig flere ting som kan føre til at det er litt vanskelig å hjelpe deg uten full compilable koden.
Closed Thread

Hugseliste

Thread Tools Søk i denne tråden
Søk i denne tråden:

Avansert søk
Visningsmoduser Ranger denne tråden
Ranger denne tråden:

Innleggsaktivitet Regler
Du kanskje ikke poste nye tråder
Du kanskje ikke poste svar
Du kanskje ikke post vedlegg
Du kanskje ikke redigere innleggene dine

BB-kode er
Smilefjes er
[IMG] koden
HTML-koden Av
Pingbacks er
Refbacks er




Alle klokkeslett er GMT -4. Nå er klokken 03:46.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Language Translations Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX og Linux Forums Content Copyright © 1993-2009. All Rights Reserved.Ad Management by RedTyger

Content Relevant nettadresser av vBSEO 3.2.0