The UNIX and Linux Forums  
Hej och välkommen från USA till UNIX och Linux Forum! Tack för ditt besök och gå med i vår globala gemenskapen.

Go Back   UNIX och Linux Forum > Upp Forum > High Level Programming
.
google unix.com



High Level Programming Post frågor om C, C + +, Java, SQL och andra programmeringsspråk här.

Mer UNIX och Linux Forum Ämnen Du kan hitta Helpful
Tråd Thread Starter Forum Svar Senaste Inlägg
kommer detta script i crontab effekt söndag 9? thepurple Sun Solaris 2 10-05-2007 05:31
Tillfälligt stänga av effekten av set-e i ksh ugeek Shell-programmering och Skript 1 03-28-2007 05:21
Hur egenskaper verkan script? Chiefos UNIX for Dummies Frågor & Svar 1 06-21-2006 07:23
Effekt av förebyggande Kernel sriram.ec UNIX för avancerade & Expertanvändare 2 03-15-2006 01:43
rekursiva effekt! sskb UNIX for Dummies Frågor & 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 denna tråd Omdöme: Thread Rating: 1 votes, 2.00 average. Visningslägen
  #1 (permalänk)  
Old 11-20-2008
cdbug cdbug is offline
Registered User
  
 

Join Date: oktober 2008
Inlägg: 52
konstig effekt: om ... annanstans i C inflytande ett tidigare uttalande

Jag skriver en kort kod i C

kan fungera bra, men när jag lägger till en om ... annars ... struktur, en beräkning innan strukturen kan inte ge ett korrekt resultat

sammanställning och köra kan göra bra, men resultatet är fel. Very strange

(1)
y2 \u003d uttryck; / / y2 \u003d 0 alltid 0 fel
.................

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


(2)

y2 \u003d uttryck; / / y2 \u003d 0 alltid 0 fel
.................

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


(3)
y2 \u003d uttryck; / / y2 \u003d normalt värde, normal
.................

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


(4)

y2 \u003d uttryck; / / y2 \u003d normalt värde, normal
.................

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

(5)
y2 \u003d uttryck; / / y2 \u003d normalt värde, normal

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

Problem: Kan inte använda om ... annars ... normalt

Fråga: (1) om ... annars ... kan påverka ett tidigare uttalande, varför?
(2) Hur löser jag problemet?

Senast redigerad av cdbug; 11-20-2008 at 05:38..
  #2 (permalänk)  
Old 11-20-2008
FRUKTANSVÄRD redoubtable is offline
Registered User
  
 

Join Date: Aug 2008
Ort: Portugal
Inlägg: 242
Det vore bra om ni kunde ge ett compilable exempel på ditt problem.
  #3 (permalänk)  
Old 11-20-2008
cdbug cdbug is offline
Registered User
  
 

Join Date: oktober 2008
Inlägg: 52
Detta händer i en stor funktion, som har en relativt komplicerad algoritm.

Enkelt uttryckt, är dess struktur som sådan:
___________________________________________________________
vissa grundläggande beräkning
------------------------------

y \u003d uttryck;

-------------------------------
____________________________________________________________
vissa åtgärder
--------------------------------

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

if (
Block 1;
)

else (
if (block 2;)
else (block 3;)
)

Strukturen för block 2 och 3 kommer att förändra det sätt på vilket y beräknas. Resultatet är fel. Jag kollar igenom gdb. De fem resultat ovan erhålls i samma miljö med undantag för de ändringar i de två blocken

I många avrättningar, y är alltid lika med 0. Annars kommer det vara mycket större än ett rätt värde.

Men när endera eller vardera av de båda blocken tas bort, y kommer att få ett normalt värde.

Jag kan inte förstå
  #4 (permalänk)  
Old 11-20-2008
jlliagre jlliagre is offline Forum Advisor  
ɹǝsn sıɹɐlosuǝdo
  
 

Join Date: Dec 2007
Plats: Paris
Inlägg: 1.427
Jag är rädd för din beskrivning av problemet ger ingen ledtråd.
Utan compilable exempel, är det ingen som ska gissa vad som är fel med din kod.
  #5 (permalänk)  
Old 11-21-2008
FRUKTANSVÄRD redoubtable is offline
Registered User
  
 

Join Date: Aug 2008
Ort: Portugal
Inlägg: 242
Den enda möjliga situation här är att block2 eller block3 svämmar över en variabel på din funktion stack och dina y Var håller på att ändras.

En funktion stack består (allt från hög minne till lågt minne) genom variabler (i omvänd ordning), EIP, esp, Funktion namn och esp.

Här är ett enkelt exempel för dina eventuella situation:
Kod:
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 ni kan se, variabel b svämmar över till rörliga a.
  #6 (permalänk)  
Old 11-23-2008
cdbug cdbug is offline
Registered User
  
 

Join Date: oktober 2008
Inlägg: 52
Det felaktiga värdet tilldelas y när execute "y \u003d uttryck;"

i gdb, kommer 'py "ge det felaktiga värdet efter Runing ovanstående redovisning.

men 'p uttrycket ger rätt värde.

block2 och block3 är så här:

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

Som sagt:
bara ett uttalande om (a-> is_root) c \u003d m2 - y2; / / y2 normal
bara ett uttalande: 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;

både göra y2 onormal. 'y2 \u003d uttrycket "är långt ifrån if__ annat __ struktur

Tack för din undervisning

Senast redigerad av cdbug; 11-23-2008 at 04:28..
  #7 (permalänk)  
Old 11-23-2008
FRUKTANSVÄRD redoubtable is offline
Registered User
  
 

Join Date: Aug 2008
Ort: Portugal
Inlägg: 242
Hum! Vilken typ av VaR Y2? Vad är Uttrycket tilldelas? Det finns egentligen flera saker som kan orsaka att det är lite svårt att hjälpa dig utan hela compilable kod.
Closed Thread

Komihåglista

Thread Tools Sök i denna tråd
Sök i denna tråd:

Avancerad sökning
Visningslägen Betygsätt denna tråd
Betygsätt denna tråd:

Utstationering Regler
Du får inte efter nya trådar
Du får inte efter svar
Du får inte skicka bilagor
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG] kod
HTML-koden är Av
Trackback är
Pingbacks är
Refbacks är




Alla tider är GMT -4. Klockan är nu 05:28.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Översättningar Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX och Linux Forum Innehållet upphovsrättsskyddat © 1993-2009. All Rights Reserved.Ad förvaltning RedTyger

Content Relevant webbadresser från vBSEO 3.2.0