The UNIX and Linux Forums  
Bonjour et bienvenu par les États-Unis à la UNIX et Linux Forums! Merci de votre visite et vous joindre à notre communauté mondiale.

Go Back   Les systèmes UNIX et Linux Forums > Top Forums > High Level Programming
.
google unix.com



High Level Programming Posez vos questions à propos de C, C + +, Java, SQL, et d'autres langages de programmation ici.

Plus d'UNIX et Linux Forum Sujets Vous trouverez peut-être utile
Fil Thread Starter Forum Réponses Last Post
sera de ce script dans crontab effet dimanche 9? thepurple SUN Solaris 2 10-05-2007 05:31 AM
Effet de désactiver temporairement mis-e en ksh ugeek De programmation et de script Shell 1 03-28-2007 05:21 AM
Comment propriétés effet script? Chiefos UNIX pour les nuls Questions et réponses 1 06-21-2006 07:23 AM
Effet de noyau préemptif sriram.ec UNIX for Advanced & Expert Users 2 03-15-2006 01:43 AM
recursive effet! sskb UNIX pour les nuls Questions et réponses 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 Recherche sur ce Thread Rating: Thread Rating: 1 votes, 2.00 average. Modes d'affichage
  #1 (permalink)  
Old 11-20-2008
cdbug cdbug is offline
Registered User
  
 

Date d'inscription: octobre 2008
Posts: 52
étrange effet: si ... C ailleurs dans l'influence d'une précédente déclaration

Je vous écris un petit code en c

mai, il fonctionne bien, mais quand je ajouter une si ... else ... structure, un calcul avant que la structure ne peut pas donner un résultat correct

la compilation et l'exécution peuvent faire bien, mais le résultat est mauvais. Très étrange

(1)
y2 \u003d expression; / / y2 \u003d 0 toujours 0 erreur
.................

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


(2)

y2 \u003d expression; / / y2 \u003d 0 toujours 0 erreur
.................

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


(3)
y2 \u003d expression; / / y2 \u003d valeur normale, normale
.................

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


(4)

y2 \u003d expression; / / y2 \u003d valeur normale, normale
.................

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

(5)
y2 \u003d expression; / / y2 \u003d valeur normale, normale

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

Problème: ne peut pas utiliser en cas de ... else ... normalement

Question: (1) si ... else ... peuvent influer sur une précédente déclaration, pourquoi?
(2) Comment faire pour résoudre le problème?

Dernière édition par cdbug; au 11.20.2008 05:38 AM..
  #2 (permalink)  
Old 11-20-2008
redoutable redoubtable is offline
Registered User
  
 

Date d'inscription: août 2008
Lieu: Portugal
Messages: 242
Il serait utile si vous pouviez donner un exemple compilable de votre problème.
  #3 (permalink)  
Old 11-20-2008
cdbug cdbug is offline
Registered User
  
 

Date d'inscription: octobre 2008
Posts: 52
Cela se passe dans une grande fonction, qui dispose d'un algorithme relativement complexe.

En bref, sa structure est comme tel:
___________________________________________________________
base de calcul
------------------------------

y \u003d expression;

-------------------------------
____________________________________________________________
certaines opérations
--------------------------------

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

if (
bloc 1;
)

else (
(si le bloc 2;)
else (bloc 3;)
)

La structure des blocs 2 et 3 vont changer la façon dont y est calculé. Le résultat est faux. Je vérifie par gdb. Les cinq résultats ci-dessus sont obtenus dans le même environnement, sauf pour les changements dans les deux blocs

Dans de nombreuses exécutions, y est toujours égal à 0. Sinon, il sera beaucoup plus grande que la valeur d'un droit.

Mais quand l'un ou chacun des deux blocs est enlevé, y aura une valeur normale.

Je ne comprends pas
  #4 (permalink)  
Old 11-20-2008
jlliagre jlliagre is offline Forum Advisor  
ɹǝsn sıɹɐlosuǝdo
  
 

Join Date: Dec 2007
Lieu: Paris
Posts: 1419
J'ai bien peur que votre description du problème ne donne pas la moindre idée.
Sans compilable par exemple, personne ne va à deviner quel est le problème avec votre code.
  #5 (permalink)  
Old 11-21-2008
redoutable redoubtable is offline
Registered User
  
 

Date d'inscription: août 2008
Lieu: Portugal
Messages: 242
La seule situation ici est que block2 ou block3 regorgent d'une variable sur la pile de votre fonction et votre y var est en train de changer.

Une fonction de la pile est composée (de plus en plus grande quantité de mémoire à peu de mémoire) par variables (dans l'ordre inverse), eip, esp, Nom de fonction et esp.

Voici un exemple simple possible pour votre situation:
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();
}
Comme vous pourrez le voir, la variable b déborde dans la variable a.
  #6 (permalink)  
Old 11-23-2008
cdbug cdbug is offline
Registered User
  
 

Date d'inscription: octobre 2008
Posts: 52
La valeur est attribuée à tort à y exécuter quand 'y \u003d expression; "

dans gdb, 'py' va donner la fausse valeur runing après la déclaration ci-dessus.

mais' p expression donne le droit de valeur.

block2 et block3 sont comme ceci:

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

Comme dit auparavant:
une seule déclaration: si (a-> is_root) c \u003d m2 - y2 / / y2 normal
une seule déclaration: if (! a-> is_root) f \u003d m2 - y2 / / y2 normal

mais:

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

ou

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

les deux font y2 anormal. 'y2 \u003d expression »est loin de if__ autre structure __

Merci pour votre enseignement

Dernière édition par cdbug; au 11.23.2008 04:28 AM..
  #7 (permalink)  
Old 11-23-2008
redoutable redoubtable is offline
Registered User
  
 

Date d'inscription: août 2008
Lieu: Portugal
Messages: 242
Hum! Quel type de la variable est y2? Quelle est la expression qui lui sont assignées? Il ya en fait plusieurs choses qui peuvent causer de sorte que c'est un peu difficile de vous aider sans le code compilable.
Closed Thread

Bookmarks

Thread Tools Recherche sur ce Thread
Recherche sur ce Thread:

Recherche avancée
Modes d'affichage Rate this thread
Rate this thread:

Règles de messages
Tu mai pas de nouvelles discussions: nonoui
Tu mai pas envoyer des réponses:
Tu mai pas envoyer des pièces jointes
Tu mai pas modifier vos messages

BB code est Sur
Smilies sont Sur
[IMG] code est Sur
Le code HTML est Hors tension
Trackbacks sont Sur
Pingbacks sont Sur
Refbacks sont Sur




Toutes les heures sont au format GMT -4. Le temps est maintenant 03:03 AM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Traductions Langue Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
Les systèmes UNIX et Linux Forums Content Copyright © 1993-2009. Tous droits Reserved.Ad de gestion par RedTyger

Content Relevant URLs par vBSEO 3.2.0