Pointeur de pointeurs en C
tafiscobar
Messages postés
1277
Date d'inscription
Statut
Contributeur
Dernière intervention
-
lami20j Messages postés 21331 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
lami20j Messages postés 21331 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
bonjour, j'espere q quelqu'un pourra m'aider, je n comprend pas pourqoi j'ai toujours Segmentation fault a l'execution,voici le code,il est simple, j'omets ici les includes
int main(int argc, char* argv[]) {
int i=0; char **str;
str=malloc(30*3*sizeof(char));
//initialisations manuelle
for(;i<3;i++)
strcpy(str[i],argv[i]); //ici erreur d'execution.
//essai d'affichage
for(i=0;i<3;i++)
printf("%s",str[i]);
return 1;
}
//j'espere q quelqu'un pourra m'aider,et please pas de vecteurs de pointeurs, mon bleme c'est d'utiliser les pointeurs de pointeurs.
tafiscobar
int main(int argc, char* argv[]) {
int i=0; char **str;
str=malloc(30*3*sizeof(char));
//initialisations manuelle
for(;i<3;i++)
strcpy(str[i],argv[i]); //ici erreur d'execution.
//essai d'affichage
for(i=0;i<3;i++)
printf("%s",str[i]);
return 1;
}
//j'espere q quelqu'un pourra m'aider,et please pas de vecteurs de pointeurs, mon bleme c'est d'utiliser les pointeurs de pointeurs.
tafiscobar
A voir également:
- Pointeur de pointeurs en C
- Pointeur souris - Guide
- Curseur Windows 10 : comment bien voir la souris à l'écran - Guide
- Le pointeur de mon pc portable ne marche plus - Guide
- Pointeur laser publicitaire ✓ - Forum Loisirs / Divertissements
- Pointeur souris avec rond de chargement qui clignote sans arrêts ✓ - Forum Windows
5 réponses
voici ton code corrigé
int main(int argc, char* argv[]) {
int i=0;
char **str;
str=(char**)malloc(30*3*sizeof(char*)); // il vaut mieux 'caster' en char**, le type de str, car malloc rend un void*
// et c'était sizeof(char*) puisque str est de tpye char**, pour le sizeof tu recopies le type avec une '*' en moins.
//initialisations manuelle
for(;i<3;i++)
{
// ATTENTION str est bien alloué ci-dessus mais tu oubliai que tu DOIS allouer CHACUN des str[i]
str[i] = (char*)malloc((strlen(argv[i])+1)*sizeof(char);
strcpy(str[i],argv[i]); //normalement l'erreur est corrigée
//essai d'affichage
}
for(i=0;i<3;i++)
printf("%s",str[i]);
return 1;
}
int main(int argc, char* argv[]) {
int i=0;
char **str;
str=(char**)malloc(30*3*sizeof(char*)); // il vaut mieux 'caster' en char**, le type de str, car malloc rend un void*
// et c'était sizeof(char*) puisque str est de tpye char**, pour le sizeof tu recopies le type avec une '*' en moins.
//initialisations manuelle
for(;i<3;i++)
{
// ATTENTION str est bien alloué ci-dessus mais tu oubliai que tu DOIS allouer CHACUN des str[i]
str[i] = (char*)malloc((strlen(argv[i])+1)*sizeof(char);
strcpy(str[i],argv[i]); //normalement l'erreur est corrigée
//essai d'affichage
}
for(i=0;i<3;i++)
printf("%s",str[i]);
return 1;
}
merci marvinrouge.
au fait, lorsq je faisais ceci: str=malloc(30*3*sizeof(char));,je pensais que c'etait possible de lui demander d'allouer directement un tableau(taille=3) de pointeurs sur char (de taille 30),mais bon cela m'apprendra a essayer de trouver plus simple que le simple.
tafiscobar
au fait, lorsq je faisais ceci: str=malloc(30*3*sizeof(char));,je pensais que c'etait possible de lui demander d'allouer directement un tableau(taille=3) de pointeurs sur char (de taille 30),mais bon cela m'apprendra a essayer de trouver plus simple que le simple.
tafiscobar
en fait tu peux allouer soit des tableaux de tableaux (char**, ce qui ressemble à un 'peigne' dans el monde réel)c'est le plus clazssqiue et les redimensionnements dynamiques sont pas tout simples MAIS sont rapides à l'éxécution
soit un long tableau contigu (char*) ou tu mettras toutes tes chaines à la suite les unes des autres mais c'est très dangereux à gérer (dépassement de mémoire, oubli du '\0')
de plus c'est dur à redimmensionner dynamiquemeent
soit un long tableau contigu (char*) ou tu mettras toutes tes chaines à la suite les unes des autres mais c'est très dangereux à gérer (dépassement de mémoire, oubli du '\0')
de plus c'est dur à redimmensionner dynamiquemeent
Bonjour,
si vous pouvez m'aidez sur les pointeurs je les saisie pas bien
par exemple si on dit
int fontion(int*)
je cmprends pas cette indice *
si vous pouvez m'aidez sur les pointeurs je les saisie pas bien
par exemple si on dit
int fontion(int*)
je cmprends pas cette indice *
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
j'ai juste oublié de préciser qu'il faut libérer la mémoire AVANT la fin du programme
les str[i] d'abord, str ensuite
for(i=0;i<3;i++)
{
free(str[i]);
str[i] = NULL;
}
free(str);
str = NULL;