Déclaration d'un pointeur sur un entier

Signaler
Messages postés
51
Date d'inscription
dimanche 13 février 2005
Statut
Membre
Dernière intervention
28 décembre 2006
-
Messages postés
991
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
-
bonjour à tous



j'aimerais savoir s'il est possbile de faire ceci:

int *tabcle new int[56], *final new int[48];





personellement ca me provoque cette erreur:
*** glibc detected *** malloc(): memory corruption: 0x0804c2f0 ***


Abandon




( cette erreur est générée a l'execution, aucune erreur de compilation )



Merci

9 réponses

Messages postés
24
Date d'inscription
mardi 25 octobre 2005
Statut
Membre
Dernière intervention
5 juillet 2007

Salut,
moi j'ai pas de problème si je tape cette ligne!
En revanche ton erreur dois venir de l'utilisation de la fonction malloc().
Tu l'utilise comment dans ton prog?


Qui vole un boeuf est vachement fort!
Messages postés
51
Date d'inscription
dimanche 13 février 2005
Statut
Membre
Dernière intervention
28 décembre 2006

arf jamais je n'utilise la fonction malloc()



pourtant je suis presque sure que l'erreur vient de la, car je fais un afficage juste avant et juste après, pour vérifier :'(



c'est bizarre

le fait que la déclaration se trouve dans une fonction de cette forme ne pose pas de problème? :

int * lafonction( char *ch, int dec )





merci de ta réponse
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
Ne jamais utiliser de pointeur pour retourner le resultat d'une fonction, car a la fin de la fonction ton pointeur ne vaut plus rien!
Passe le résultat en paramètre.

Shell
Messages postés
51
Date d'inscription
dimanche 13 février 2005
Statut
Membre
Dernière intervention
28 décembre 2006

arf , ok bon je vais faire ca, en plus ca supprimera certainement
l'erreur puisque je pourrais directement déclarer mes tableaux



Merci
Messages postés
991
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
7
"Ne jamais utiliser de pointeur pour retourner le resultat d'une
fonction, car a la fin de la fonction ton pointeur ne vaut plus rien!"
heuuuu je suis pas trop daccord avec toi [../auteurdetail.aspx?ID=3585 DeAtHCrAsH] !!!
par contre je trouve ta synthaxe bizare pofipofo!
int *tabcle = new int[56]
ca veut dire que tu fais
ton tabcle est un pointeur sur un int. un "new int" renvoie un pointeur sur une malloc de int. donc un "new int[56]" veut dire que tu alloue un int**

[../auteurdetail.aspx?ID=3585 ]
Messages postés
51
Date d'inscription
dimanche 13 février 2005
Statut
Membre
Dernière intervention
28 décembre 2006

arf je croyais que ca allouer un tableau de 56 entiers
Messages postés
991
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
7
bah en fait je sais pas trop comment marche le new C++ sur un type C de base
moi a ta place je ferrai plutot

int* tabcle;
tabcle = (int*) malloc(56*sizeof(int));

dans ce cas, ca t'alloue un tableau de 56 entiers. apres, si tu veu modifier ton tableau dans une fonction func(int* tab), tu fai un appel func(tabcle), ca te permet de modifier les valeurs, et ces modifs seront bien modifiees a la sortie de ta fonction. par contre, si tu alloue ton tableau dans la fonctions, ca sera pas pris en compte vu que tu modifie la valeur de tab elle meme. donc si tu veu allouer le tableau dans ta fonction , il faut faire:

func(int** tab) {

...

(*tab) = malloc ...

...

}

int *tabcle;
func(&tabcle)
//la ton tabcle est affecte.


eske j'ai ete clair?
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
Moi à la place je ferais int tabcle[56];

if(!Meilleur("Joky")) return ERREUR;<
Messages postés
991
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
7
heuuu oue ca depend de l'utilisation qu'il en fait. si il a besoin de declarer la taille dynmiquement ca marche pas. et si il fait l'allocation dans une fonction ca la conservera pas non plus.