The UNIX and Linux Forums  
Hallo en welkom van de Verenigde Staten aan de UNIX en Linux Forum! Bedankt voor uw bezoek en Deelnemen aan onze wereldwijde gemeenschap.

Go Back   De Unix-en Linux Forum > Top Forums > Hoog Niveau Programmering
.
google unix.com



Hoog Niveau Programmering Post vragen over C, C + +, Java, SQL, en andere programmeertalen hier.

Meer UNIX en Linux Forum Onderwerpen Misschien vindt u Helpful
Draad Thread Starter Forum Antwoorden Last Post
zal dit script in werking crontab zondag 9?? thepurple SUN Solaris 2 10-05-2007 04:31
Tijdelijk uitschakelen effect van set-e in ksh ugeek Programmeren en Shell Scripting 1 03-28-2007 04:21
Hoe eigenschappen effect script? Chiefos UNIX voor Dummies Questions & Answers 1 06-21-2006 06:23
Effect van Preemptive Kernel sriram.ec UNIX for Advanced & Expert Gebruikers 2 03-15-2006 01:43
recursieve kracht! sskb UNIX voor Dummies Questions & Answers 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 Zoeken in deze Thread Waardering: Thread Rating: 1 votes, 2.00 average. Display Modes
  #1 (permalink)  
Old 11-20-2008
cdbug cdbug is offline
Geregistreerde gebruiker
  
 

Join Datum: oktober 2008
Posts: 52
vreemd effect: als ... anders in C invloed een eerdere verklaring

Ik schrijf een korte code in C

kan goed werken, maar toen ik voeg een if ... anders ... structuur, een berekening voor de structuur kan niet geven een correct resultaat

opstellen en uitvoeren kan goed doen, maar het resultaat is verkeerd. Heel vreemd

(1)
y2 \u003d expressie; / / y2 \u003d 0 altijd 0 fout
.................

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


(2)

y2 \u003d expressie; / / y2 \u003d 0 altijd 0 fout
.................

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


(3)
y2 \u003d expressie; / / y2 \u003d normale waarde; normaal
.................

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


(4)

y2 \u003d expressie; / / y2 \u003d normale waarde; normaal
.................

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

(5)
y2 \u003d expressie; / / y2 \u003d normale waarde; normaal

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

Trouble: kan niet gebruiken als ... anders ... normaal

Vraag: (1) als ... anders ... invloed kan uitoefenen op een eerdere verklaring, waarom?
(2) Hoe op te lossen het probleem?

Laatst bewerkt door cdbug; op 11.20.2008 05:38..
  #2 (permalink)  
Old 11-20-2008
geducht redoubtable is offline
Geregistreerde gebruiker
  
 

Join Date: Aug 2008
Locatie: Portugal
Posts: 242
Het zou nuttig zijn als u een compileerbaar voorbeeld van je probleem zou kunnen bieden.
  #3 (permalink)  
Old 11-20-2008
cdbug cdbug is offline
Geregistreerde gebruiker
  
 

Join Datum: oktober 2008
Posts: 52
Dit gebeurt in een grote functie, die een relatief gecompliceerd algoritme heeft.

Eenvoudig gezegd, de structuur is als volgt:
___________________________________________________________
aantal basisberekeningsstap
------------------------------

y \u003d expressie;

-------------------------------
____________________________________________________________
sommige handelingen
--------------------------------

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

if (
blok 1;
)

else (
if (blok 2;)
else (blok 3;)
)

De structuur van de blokken 2 en 3 zal veranderen de manier waarop de y wordt berekend. Het resultaat is verkeerd. Ik check het door gdb. De vijf bovenstaande resultaten worden verkregen bij dezelfde omgeving, met uitzondering van de wijzigingen in de twee blokken

In vele executies, y is altijd gelijk aan 0. Anders zal het veel groter dan een juiste waarde.

Maar wanneer een van beide of elk van de twee blokken is verwijderd, y zal het verkrijgen van een normale waarde.

Ik kan niet begrijpen
  #4 (permalink)  
Old 11-20-2008
jlliagre jlliagre is offline Forum Advisor  
ɹǝsn sıɹɐlosuǝdo
  
 

Join Date: december 2007
Locatie: Paris
Berichten: 1.399
Ik ben bang dat je beschrijving van het probleem geven geen aanwijzing.
Zonder een compileerbaar bijvoorbeeld, is niemand gaat raden wat er mis is met uw code.
  #5 (permalink)  
Old 11-21-2008
geducht redoubtable is offline
Geregistreerde gebruiker
  
 

Join Date: Aug 2008
Locatie: Portugal
Posts: 242
De enige mogelijke situatie hier is dat block2 of block3 een variabele zijn overvol op uw functie en uw stapel's y var wordt veranderd.

Een functie's stack is samengesteld (toenemende geheugen van hoog naar laag geheugen) door variabelen (in omgekeerde volgorde), EIP, esp, Naam en functie esp.

Hier is een simpel voorbeeld voor uw mogelijke situatie:
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();
}
Zoals u zal kunnen zien, variabele b overflows in variabele a.
  #6 (permalink)  
Old 11-23-2008
cdbug cdbug is offline
Geregistreerde gebruiker
  
 

Join Datum: oktober 2008
Posts: 52
De verkeerde waarde wordt toegekend aan y wanneer execute 'y \u003d uitdrukking; "

in gdb zal, 'py' geven de verkeerde waarde na runing de bovenstaande verklaring.

maar 'p uitdrukking' geeft de juiste waarde.

block2 en block3 zijn als volgt:

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

Zoals eerder gezegd:
slechts een verklaring: if (a-> is_root) c \u003d m2 - y2; / / y2 normaal
slechts een verklaring: if (! a-> is_root) f \u003d m2 - y2; / / y2 normaal

maar:

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

of

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

zowel te maken y2 abnormaal. 'y2 \u003d uitdrukking' is ver weg van if__ anders __ structuur

Bedankt voor uw onderwijs

Laatst bewerkt door cdbug; op 11.23.2008 04:28..
  #7 (permalink)  
Old 11-23-2008
geducht redoubtable is offline
Geregistreerde gebruiker
  
 

Join Date: Aug 2008
Locatie: Portugal
Posts: 242
Hum! Wat voor soort var y2? Wat is meningsuiting toegewezen? Er zijn eigenlijk verschillende dingen die kunnen veroorzaken dat zo is een beetje moeilijk om je te helpen zonder de volledige compileerbaar code.
Closed Thread

Bladwijzers

Thread Tools Zoeken in deze Thread
Zoeken in deze Thread:

Uitgebreid zoeken
Display Modes Beoordeel deze draad
Beoordeel deze draad:

Posting Regels
Jij mag niet Post Nieuwe threads
Jij mag niet na antwoorden
Jij mag niet post attachments
Jij mag niet bewerk uw berichten

BB code is Aan
Smilies zijn Aan
[IMG] code Aan
HTML-code is Uit
Trackbacks zijn Aan
Pingbacks zijn Aan
Refbacks zijn Aan




Alle tijden zijn GMT -4. Het is nu 02:18.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Vertalingen Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
De Unix-en Linux Forums Copyright © 1993-2009. Alle rechten Reserved.Ad Beheer door RedTyger

Content Relevante URL's door vBSEO 3.2.0