Forum Graph100

Forum Graph100

Vous n'êtes pas identifié.

Annonce

Bonjour et bienvenue sur le nouveau Forum Graph100 !
L'intégralité des données a été transférée sur un forum PunBB et tout les comptes sont fonctionnels avec le même nom d'utilisateur et mot de passe.
Un wiki est aussi disponible avec le même compte ! N'oubliez pas de remettre votre avatar, bon surf !
Pour plus d'informations, consultez ce post.

#1 21 Jun 2002 13:24:13

Guest
Invité

problème de pointeur en C

voici le prog

Code:

[color=red]/*decla des variables, etc*/[/color]
int som(int x[],int y[]);

main()
{
[color=red]/*on remplit 2 tableaux x et y de même dim*/[/color]

ptr = som(x,y);
for (count=0;count<Dim_des_tableaux;count++)
  {
   printf("%d",*ptr++);
   }
}

int som(int x[],inty[])
{
[color=red]/*on additionne les éléments de x et de y, et résultat dans un 3ème tableau z*/[/color]
return z;
}

Alors, en rajoutant des printf partout, ça fait la somme comme il faut, le problème c'est que dans

Code:

for (count=0;count<Dim_des_tableaux;count++)
  {
   printf("%d",*ptr++);
   }
}

il affiche le 1er élément comme il faut, puis tous les autres sont  :exorbité:


Vous voyez d'où peut venir le problème, je suis débutant en C (pas ++)

 

#2 22 Jun 2002 05:30:30

Folken
Membre Communauté Graph100
Lieu: Colmar (68)
Date d'inscription: 22 Feb 2002
Messages: 849
Site web

Re: problème de pointeur en C

allez les pro du C .... aidez le pauvre piti FB ......... lol  lol

Hors ligne

 

#3 22 Jun 2002 06:02:25

L@rk
Programmeur Graph100
Lieu: Saumur (49)
Date d'inscription: 30 Jan 2002
Messages: 742
Site web

Re: problème de pointeur en C

Ca serais bien si tu nous donnais un code complet la pske non seulement ya des trucs pas clairs dans la "logique" du programme et en + je comprend pas bien ou tu veux en aboutir ...[/code]


L@rk @ FGPstudios

Hors ligne

 

#4 22 Jun 2002 12:50:32

Guest
Invité

Re: problème de pointeur en C

Merci Bruno  wink  et L@rk aussi  smile
Pour L@rk

Code:

#include <stdio.h>
int x[10], y[10], cont;
int *reslt;
int * som(int x[], int y[]);

main()
{
printf("nnEntrez les 10 valeurs");
for(cont=0;cont<10;cont++)
{
scanf("%d", &x[cont]);
scanf("%d", &y[cont]);
}
reslt = som(x,y);
for(cont=0;cont<10;cont++)
{
printf("n%dt%dt%d",x[cont],y[cont], *(reslt++));
}}
return 0;
}

int *som (int x[],int y[])
{
int ctr,z[3];
for(ctr=0;ctr<10;ctr++)
{
z[ctr] = x[ctr] + y[ctr];
}
return z;
}

Le but du prog, c'est additionner 2 tableaux, je sais qu'on peut facilement résoudre en supprimant la fonction som, mais je voudrais savoir comment faire retourner un pointeur correctement.

Le problème, par ex pour 2 tableaux {1,2,3,4,5,6,7,8,9,10} et {10,9,8,7,6,5,4,3,2,1}, ça affiche 11, puis des nbres aléatoires :evil:

En mettant des printf() partout, j'ai pu voir que ça additionnait dans la fct som, mais c'est dans l'affichage dans main que ça merde.

 

#5 23 Jun 2002 18:51:51

y@ss
Programmeur Graph100
Lieu: Montreal -CANADA-
Date d'inscription: 06 Feb 2002
Messages: 104

Re: problème de pointeur en C

Salut,
Bon jai décidé de pas te laissé tomber parce ke jai vu ke personne navait répondu correctement a ce post ki souleve une question de programmation assez importante a mon avis :

Avant tout, ton probleme vient du fait que tu essaies de lire une zone de la mémoire non allouée, donc qui peut contenir des valeurs aléatoires,
En compilant sur Visual C++ (6.0) regarde la message d'alerte kil lance (même si je lai vu avant kil me le dise  wink ):


warning C4172: returning address of local variable or temporary

donc il faut que tu saches que le problême vient de cette partie du code :

Code:

int *som (int x[],int y[]) 
{ 
    int ctr,z[3]; 

    for(ctr=0;ctr<10;ctr++) 
    { 
        z[ctr] = x[ctr] + y[ctr]; 
    }

    return z; 
}

en fait premierement, tas fait une erreur d'inattention car tu crée un tableau de 3 entiers et tu essaies de mettre 10 entier dedans (regarde bien la fonction Som()

Code:

....
z[3]; 
....
for(ctr=0;ctr<10;ctr++) 
    { 
        z[ctr] = x[ctr] + y[ctr]; 
    }
....

déja ça c une erreur, donc atention a ce ke tu ecris.

deuxiemement, une erreur plus difficile a voir car il faut comprendre comme le compilateur alloue la mémoire, donc tu alloue statiquement une mémoire de 10 entier (ds le cas correct) a travers un tableau statique de 10 entiers : int  Z[10]
il faut savoir que lorske tu sors de ta fonction Som() , ce tableau va etre detruit donc lorske tenvoie un pointeur sur la zone mémoire de Z, il n ya plus rien lorske tes ds le main(). donc normal que tui ais des valeurs assez étonantes.

Voici le code correct ecrit en C++ et non en C:

Code:

#include <iostream.h>
#include <stdio.h> 
int * som(int x[], int y[]); 

main() 
{ 
    int * reslt, cont,
        x[4]={1,2,3,4},
        y[10]={1,2,3,4};

    printf("nnEntrez les 10 valeurs"); 

/*    for(cont=0;cont<10;cont++) 
    { 
        cin >> x[cont];
        cin >> y[cont]; 
    }

*/
    reslt = som(x,y); 

    for(cont=0;cont<4;cont++) 
    { 
        printf("n %d + %d = %d",x[cont],y[cont], *(reslt++)); 
    }

    return 0; 
} 

int *som (int x[],int y[]) 
{ 
    int ctr,*z;
    
    z= new int[4];

    for(ctr=0;ctr<4;ctr++) 
    { 
        z[ctr] = x[ctr] + y[ctr];
    }
    
    return z; 
}

c compatible TC++ 3.0


=========
@+

y@ss
=========

Hors ligne

 

#6 24 Jun 2002 02:24:20

Guest
Invité

Re: problème de pointeur en C

Merci Y@ss, le 3 c'était une erreur de recopiage (j'étais redescendu à 3 éléments pour tester plus vite  wink ). Mais je crois que tu t'es aussi un peu trompé avec les 4 et les 10.  :P

 

#7 24 Jun 2002 11:37:49

Julien
C++iste convaincu
Lieu: Waterloo (Be)
Date d'inscription: 29 May 2002
Messages: 1456
Site web

Re: problème de pointeur en C

He mais c'est qu'il va vite la FB!  8O
Mince j'entrave que pouic, faut que je le rattrape! http://www.smilies.org/basesmilies/booky[1].gif


Pensez à surveiller mes releases wink

Hors ligne

 

#8 24 Jun 2002 11:44:32

Folken
Membre Communauté Graph100
Lieu: Colmar (68)
Date d'inscription: 22 Feb 2002
Messages: 849
Site web

Re: problème de pointeur en C

piti mais rapide  lol  lol  lol

Hors ligne

 

#9 24 Jun 2002 18:49:14

y@ss
Programmeur Graph100
Lieu: Montreal -CANADA-
Date d'inscription: 06 Feb 2002
Messages: 104

Re: problème de pointeur en C

non je ne me suis pas trompé, désolé...  big_smile

regarde bien jai declaré le tableau x de dim 4, y de dim 4 et le z de dim 4,
pis les compteur tournent 4 fois !

Je tai dit de faire attention non !   cool

Allez @++


=========
@+

y@ss
=========

Hors ligne

 

#10 25 Jun 2002 01:56:41

Guest
Invité

Re: problème de pointeur en C


Code:

#include <iostream.h>
#include <stdio.h> 
int * som(int x[], int y[]); 

main() 
{ 
    int * reslt, cont,
        x[4]={1,2,3,4},
        y[[color=red]10[/color]]={1,2,3,4};

    printf("nnEntrez les [color=red]10 [/color]valeurs"); 

/*    for(cont=0;cont<[color=red]10[/color];cont++) 
    { 
        cin >> x[cont];
        cin >> y[cont]; 
    }

*/
    reslt = som(x,y); 

    for(cont=0;cont<4;cont++) 
    { 
        printf("n %d + %d = %d",x[cont],y[cont], *(reslt++)); 
    }

    return 0; 
} 

int *som (int x[],int y[]) 
{ 
    int ctr,*z;
    
    z= new int[4];

    for(ctr=0;ctr<4;ctr++) 
    { 
        z[ctr] = x[ctr] + y[ctr];
    }
    
    return z; 
}

c compatible TC++ 3.0

roll C' était pour voir si je faisais attention ?  lol


Sinon, tt en gardant mon code, il suffit de déclarer le tableau z en même temps que les autres...



Bruno > comment ça piti ?

Julien  > J'ai du temps libre moi, c'est tout  cool

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr