![]() |
Hallo en welkom van de Verenigde Staten aan de UNIX en Linux Forum! Bedankt voor uw bezoek en Deelnemen aan onze wereldwijde gemeenschap.
|
|
google unix.com
|
|||||||
| Forums | Registreer | Forum Regels | Links | Albums | Veelgestelde vragen | Ledenlijst | Kalender | Zoeken | Today's Posts | Markeer forums als gelezen |
| 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 |
![]() |
|
|
LinkBack | Thread Tools | Zoeken in deze Thread |
Waardering:
|
Display Modes |
|
|
|
||||
|
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.. |
|
||||
|
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 |
|
||||
|
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();
}
|
|
||||
|
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.. |
|
||||
|
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.
|
![]() |
| Bladwijzers |
| Thread Tools | Zoeken in deze Thread |
| Display Modes | Beoordeel deze draad |
|
|