Vous n'êtes pas identifié.
voici le prog
[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
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 ++)
allez les pro du C .... aidez le pauvre piti FB .........
Hors ligne
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]
Hors ligne
Merci Bruno et L@rk aussi
Pour L@rk
#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.
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 ):
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 :
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()
.... 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:
#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
Hors ligne
Merci Y@ss, le 3 c'était une erreur de recopiage (j'étais redescendu à 3 éléments pour tester plus vite ). Mais je crois que tu t'es aussi un peu trompé avec les 4 et les 10. :P
He mais c'est qu'il va vite la FB! 8O
Mince j'entrave que pouic, faut que je le rattrape!
Hors ligne
piti mais rapide
Hors ligne
non je ne me suis pas trompé, désolé...
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 !
Allez @++
Hors ligne
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
C' était pour voir si je faisais attention ?
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