Pointeur et Tableaux
omidaoui
Messages postés
32
Date d'inscription
Statut
Membre
Dernière intervention
-
omidaoui Messages postés 32 Date d'inscription Statut Membre Dernière intervention -
omidaoui Messages postés 32 Date d'inscription Statut Membre Dernière intervention -
Bonjour
Ci joint deux fonctions pour créer un tableau et le remplir a partir du clavier :
int* create_tab1(int n){
int i;
int* t=(int*)malloc(n*sizeof(int));
for(i=0;i<n;i++){
printf("entrez la valeur T[%d] : \n",i);
scanf("%d",t+i);
}
return t;
}
void create_tab2(int *t, int n){
int i;
t=(int*)malloc(n*sizeof(int));
for(i=0;i<n;i++){
printf("entrez la valeur T[%d] : \n",i);
scanf("%d",t+i);
}
}
et voila la fonction Main qui test la fonction Creat_Tab1 :
int main(){
int *T, n;
printf("entrez la valeur de N \n");
scanf("%d",&n);
T =(int*)malloc(n*sizeof(int));
T = create_tab1(n);
return 0;
}
et voila la fonction Main qui test la fonction Creat_Tab2 :
int main(){
int *T, n;
printf("entrez la valeur de N \n");
scanf("%d",&n);
create_tab2(T, n);
return 0;
}
je sais pas pourquoi la premier marche alors qu'en passant le T en paramètre, génère des valeurs incorrectes en affichant le tableau après sinon Windows me lance un message disant main.exe a cessé de fonctionner et ferme le programme
merci pour vos retours
Ci joint deux fonctions pour créer un tableau et le remplir a partir du clavier :
int* create_tab1(int n){
int i;
int* t=(int*)malloc(n*sizeof(int));
for(i=0;i<n;i++){
printf("entrez la valeur T[%d] : \n",i);
scanf("%d",t+i);
}
return t;
}
void create_tab2(int *t, int n){
int i;
t=(int*)malloc(n*sizeof(int));
for(i=0;i<n;i++){
printf("entrez la valeur T[%d] : \n",i);
scanf("%d",t+i);
}
}
et voila la fonction Main qui test la fonction Creat_Tab1 :
int main(){
int *T, n;
printf("entrez la valeur de N \n");
scanf("%d",&n);
T =(int*)malloc(n*sizeof(int));
T = create_tab1(n);
return 0;
}
et voila la fonction Main qui test la fonction Creat_Tab2 :
int main(){
int *T, n;
printf("entrez la valeur de N \n");
scanf("%d",&n);
create_tab2(T, n);
return 0;
}
je sais pas pourquoi la premier marche alors qu'en passant le T en paramètre, génère des valeurs incorrectes en affichant le tableau après sinon Windows me lance un message disant main.exe a cessé de fonctionner et ferme le programme
merci pour vos retours
A voir également:
- Pointeur et Tableaux
- Pointeur souris - Guide
- Curseur Windows 10 : comment bien voir la souris à l'écran - Guide
- Tableaux croisés dynamiques - Guide
- Fusionner deux tableaux excel - Guide
- Les tableaux word - Guide
2 réponses
Bonjour
Ta fonction create_tab2 remplit une table qui n'est pas celle que tu lui as passée en paramètre.
En effet, dans le programme principal, tu alloues une zone pour une table, et tu passes le pointeur à la fonction create_tab2.
Cette fonction reçoit une copie du pointeur. Je dis bien une copie du pointeur, pas le pointeur lui-même. Dans la fonction, tu alloues un nouveau tableau dont tu mets l'adresse dans cette copie du pointeur. Tu perds ainsi la trace du l'endroit où T pointait dans le programme principal. Ce qui se passe ensuite dans create_tab2 n'a plus aucun rapport avec la zone pointée par T.
Ta fonction create_tab2 remplit une table qui n'est pas celle que tu lui as passée en paramètre.
En effet, dans le programme principal, tu alloues une zone pour une table, et tu passes le pointeur à la fonction create_tab2.
Cette fonction reçoit une copie du pointeur. Je dis bien une copie du pointeur, pas le pointeur lui-même. Dans la fonction, tu alloues un nouveau tableau dont tu mets l'adresse dans cette copie du pointeur. Tu perds ainsi la trace du l'endroit où T pointait dans le programme principal. Ce qui se passe ensuite dans create_tab2 n'a plus aucun rapport avec la zone pointée par T.
omidaoui
Messages postés
32
Date d'inscription
Statut
Membre
Dernière intervention
bien reçu , Merci beaucoup
Bonjour,
Attention, l'exemple avec
L'exemple avec
Attention, l'exemple avec
create_tab1()fait 2 allocations! Et aucune libération.
L'exemple avec
create_tab2(). Une fonction ne peut modifier une variable de l'appelant que si elle est passée par adresse. Ici la variable est un pointeur, son adresse est donc un pointeur de pointeur.
void create_tab2( int** adr_t , int n ) { *adr_t = malloc( n * sizeof(int) ); int* t = *adr_t; .....