La reallocation de memoire ce fait dans une fonction (pour l'exemple
f1(uint **TRec))
Dans mon exemple, si je place le code de la fonction dans le main, pas
de probleme ca semble marche.
Mais quand j'utilise la fonction ca merde complet ...
Alors soit je n'utilise pas malloc() et realloc() correctement, soit
j'ai un probleme dans le passage de TRec.
Si vous pouvez m'aider ... svp ... ca serai sympas ... merci
Voila mon code exemple pour illustrer mon souci
La reallocation de memoire ce fait dans une fonction (pour l'exemple f1(uint **TRec))
Dans mon exemple, si je place le code de la fonction dans le main, pas de probleme ca semble marche. Mais quand j'utilise la fonction ca merde complet ... Alors soit je n'utilise pas malloc() et realloc() correctement, soit j'ai un probleme dans le passage de TRec.
Si vous pouvez m'aider ... svp ... ca serai sympas ... merci Voila mon code exemple pour illustrer mon souci
#include <stdio.h> #include <malloc.h>
void f1(uint **TRec) { int i;
TRec=(uint **) realloc(TRec,4*sizeof(uint));
en fait tu dois allouer la place pour des uint * TRec=realloc(TRec,4*sizeof(*TRec));
if (TRec==NULL) { printf("Erreur d'allocation mémoire CheAAAckDouble !!!"); exit(1); }
for (i=2;i<4;i++) { TRec[i]=(uint *) malloc(2*sizeof(uint)); if (TRec[i]==NULL) { printf("Erreur d'allocation mémoire CheckDouble !!!"); exit(1); } TRec[i][0]=i; TRec[i][1]=i+1; } }
Si tu veux modifier le contenu d'un pointeur dans une fonction (typiquement par realloc()), tu dois le passer par adresse pour que cette modification soit visible par l'appelant. SInon, l'appelant continue à travailer avec l'adresse avant realloc().
void f1(uint ***TRec) { int i;
*TRec=realloc(*TRec,4*sizeof(**TRec)); Puis dans la suite de la fonction utiliser *TRec au lieu de TRec
void main(void) {
uint **TRec; int i;
TRec=(uint **) malloc(2*sizeof(uint));
Allouer la place pour des uint * et non des uint
if (TRec==NULL) { printf("Erreur d'allocation mémoire CheckDouble !!!"); exit(1); }
for (i=0;i<2;i++) { TRec[i]=(uint *) malloc(2*sizeof(uint)); if (TRec[i]==NULL) { printf("Erreur d'allocation mémoire CheckDouble !!!"); exit(1); } TRec[i][0]=i; TRec[i][1]=i+1; }
for (i=0;i<2;i++) { printf("%i %in",TRec[i][0],TRec[i][1]); }
printf("nn");
f1(TRec);
Ici passer l'adresse f1(&TRec);
for (i=0;i<4;i++) { printf("%i %in",TRec[i][0],TRec[i][1]); }
for (i=0;i<4;i++) { TRec[i]=(uint *) realloc(TRec[i],3*sizeof(uint)); TRec[i][2]=i; }
printf("nn"); for (i=0;i<4;i++) { printf("%i %i %in",TRec[i][0],TRec[i][1],TRec[i][2]); }
}
Le but du jeu est d'avoir un tableau de pointers vers des pointers de
tableaux de integer
La reallocation de memoire ce fait dans une fonction (pour l'exemple
f1(uint **TRec))
Dans mon exemple, si je place le code de la fonction dans le main, pas
de probleme ca semble marche.
Mais quand j'utilise la fonction ca merde complet ...
Alors soit je n'utilise pas malloc() et realloc() correctement, soit
j'ai un probleme dans le passage de TRec.
Si vous pouvez m'aider ... svp ... ca serai sympas ... merci
Voila mon code exemple pour illustrer mon souci
#include <stdio.h>
#include <malloc.h>
void f1(uint **TRec)
{
int i;
TRec=(uint **) realloc(TRec,4*sizeof(uint));
en fait tu dois allouer la place pour des uint *
TRec=realloc(TRec,4*sizeof(*TRec));
if (TRec==NULL) {
printf("Erreur d'allocation mémoire CheAAAckDouble !!!");
exit(1);
}
for (i=2;i<4;i++) {
TRec[i]=(uint *) malloc(2*sizeof(uint));
if (TRec[i]==NULL) {
printf("Erreur d'allocation mémoire CheckDouble !!!");
exit(1);
}
TRec[i][0]=i;
TRec[i][1]=i+1;
}
}
Si tu veux modifier le contenu d'un pointeur dans une fonction (typiquement par
realloc()), tu dois le passer par adresse pour que cette modification soit
visible par l'appelant. SInon, l'appelant continue à travailer avec l'adresse
avant realloc().
void f1(uint ***TRec)
{
int i;
*TRec=realloc(*TRec,4*sizeof(**TRec));
Puis dans la suite de la fonction utiliser *TRec au lieu de TRec
void main(void)
{
uint **TRec;
int i;
TRec=(uint **) malloc(2*sizeof(uint));
Allouer la place pour des uint * et non des uint
if (TRec==NULL) {
printf("Erreur d'allocation mémoire CheckDouble !!!");
exit(1);
}
for (i=0;i<2;i++) {
TRec[i]=(uint *) malloc(2*sizeof(uint));
if (TRec[i]==NULL) {
printf("Erreur d'allocation mémoire CheckDouble !!!");
exit(1);
}
TRec[i][0]=i;
TRec[i][1]=i+1;
}
for (i=0;i<2;i++) {
printf("%i %in",TRec[i][0],TRec[i][1]);
}
printf("nn");
f1(TRec);
Ici passer l'adresse
f1(&TRec);
for (i=0;i<4;i++) {
printf("%i %in",TRec[i][0],TRec[i][1]);
}
for (i=0;i<4;i++) {
TRec[i]=(uint *) realloc(TRec[i],3*sizeof(uint));
TRec[i][2]=i;
}
printf("nn");
for (i=0;i<4;i++) {
printf("%i %i %in",TRec[i][0],TRec[i][1],TRec[i][2]);
}
La reallocation de memoire ce fait dans une fonction (pour l'exemple f1(uint **TRec))
Dans mon exemple, si je place le code de la fonction dans le main, pas de probleme ca semble marche. Mais quand j'utilise la fonction ca merde complet ... Alors soit je n'utilise pas malloc() et realloc() correctement, soit j'ai un probleme dans le passage de TRec.
Si vous pouvez m'aider ... svp ... ca serai sympas ... merci Voila mon code exemple pour illustrer mon souci
#include <stdio.h> #include <malloc.h>
void f1(uint **TRec) { int i;
TRec=(uint **) realloc(TRec,4*sizeof(uint));
en fait tu dois allouer la place pour des uint * TRec=realloc(TRec,4*sizeof(*TRec));
if (TRec==NULL) { printf("Erreur d'allocation mémoire CheAAAckDouble !!!"); exit(1); }
for (i=2;i<4;i++) { TRec[i]=(uint *) malloc(2*sizeof(uint)); if (TRec[i]==NULL) { printf("Erreur d'allocation mémoire CheckDouble !!!"); exit(1); } TRec[i][0]=i; TRec[i][1]=i+1; } }
Si tu veux modifier le contenu d'un pointeur dans une fonction (typiquement par realloc()), tu dois le passer par adresse pour que cette modification soit visible par l'appelant. SInon, l'appelant continue à travailer avec l'adresse avant realloc().
void f1(uint ***TRec) { int i;
*TRec=realloc(*TRec,4*sizeof(**TRec)); Puis dans la suite de la fonction utiliser *TRec au lieu de TRec
void main(void) {
uint **TRec; int i;
TRec=(uint **) malloc(2*sizeof(uint));
Allouer la place pour des uint * et non des uint
if (TRec==NULL) { printf("Erreur d'allocation mémoire CheckDouble !!!"); exit(1); }
for (i=0;i<2;i++) { TRec[i]=(uint *) malloc(2*sizeof(uint)); if (TRec[i]==NULL) { printf("Erreur d'allocation mémoire CheckDouble !!!"); exit(1); } TRec[i][0]=i; TRec[i][1]=i+1; }
for (i=0;i<2;i++) { printf("%i %in",TRec[i][0],TRec[i][1]); }
printf("nn");
f1(TRec);
Ici passer l'adresse f1(&TRec);
for (i=0;i<4;i++) { printf("%i %in",TRec[i][0],TRec[i][1]); }
for (i=0;i<4;i++) { TRec[i]=(uint *) realloc(TRec[i],3*sizeof(uint)); TRec[i][2]=i; }
printf("nn"); for (i=0;i<4;i++) { printf("%i %i %in",TRec[i][0],TRec[i][1],TRec[i][2]); }
}
David Roman CESR
J'ai suivi tes instructions, mais j'ai du oublier quelque chose ... Voila mon code modifie
J'ai un Segmentation Fault(coredump) au moment de l'affectation *TRec[i][0]=i;
#include <stdio.h> #include <malloc.h>
void f1(uint ***TRec) { int i;
//*TRec=realloc(*TRec,4*sizeof(**TRec)); *TRec=realloc(*TRec,4*sizeof(uint *)); <===================================================== LA
if (*TRec==NULL) { <===================================================== LA printf("Erreur d'allocation mémoire CheAAAckDouble !!!"); exit(1); }
for (i=2;i<4;i++) { *TRec[i]=malloc(2*sizeof(uint)); <===================================================== LA if (*TRec[i]==NULL) { <===================================================== LA printf("Erreur d'allocation mémoire CheckDouble !!!"); exit(1); } *TRec[i][0]=i; <===================================================== LA (1) *TRec[i][1]=i+1; <===================================================== LA (2) } }
void main(void) {
uint **TRec; int i;
TRec=(uint **) malloc(2*sizeof(uint *)); <===================================================== LA if (TRec==NULL) { printf("Erreur d'allocation mémoire CheckDouble !!!"); exit(1); }
for (i=0;i<2;i++) { TRec[i]=(uint *) malloc(2*sizeof(uint)); if (TRec[i]==NULL) { printf("Erreur d'allocation mémoire CheckDouble !!!"); exit(1); } TRec[i][0]=i; TRec[i][1]=i+1; }
for (i=0;i<2;i++) { printf("%i %in",TRec[i][0],TRec[i][1]); }
printf("nn");
f1(&TRec); <===================================================== LA
for (i=0;i<4;i++) { printf("%i %in",TRec[i][0],TRec[i][1]); }
for (i=0;i<4;i++) { TRec[i]=(uint *) realloc(TRec[i],3*sizeof(uint)); TRec[i][2]=i; }
printf("nn"); for (i=0;i<4;i++) { printf("%i %i %in",TRec[i][0],TRec[i][1],TRec[i][2]); } }
J'ai suivi tes instructions, mais j'ai du oublier quelque chose ...
Voila mon code modifie
J'ai un Segmentation Fault(coredump) au moment de l'affectation
*TRec[i][0]=i;
#include <stdio.h>
#include <malloc.h>
void f1(uint ***TRec)
{
int i;
//*TRec=realloc(*TRec,4*sizeof(**TRec));
*TRec=realloc(*TRec,4*sizeof(uint *));
<===================================================== LA
if (*TRec==NULL) { <===================================================== LA
printf("Erreur d'allocation mémoire CheAAAckDouble !!!");
exit(1);
}
for (i=2;i<4;i++) {
*TRec[i]=malloc(2*sizeof(uint));
<===================================================== LA
if (*TRec[i]==NULL) { <===================================================== LA
printf("Erreur d'allocation mémoire CheckDouble !!!");
exit(1);
}
*TRec[i][0]=i; <===================================================== LA
(1)
*TRec[i][1]=i+1; <===================================================== LA (2)
}
}
void main(void)
{
uint **TRec;
int i;
TRec=(uint **) malloc(2*sizeof(uint *));
<===================================================== LA
if (TRec==NULL) {
printf("Erreur d'allocation mémoire CheckDouble !!!");
exit(1);
}
for (i=0;i<2;i++) {
TRec[i]=(uint *) malloc(2*sizeof(uint));
if (TRec[i]==NULL) {
printf("Erreur d'allocation mémoire CheckDouble !!!");
exit(1);
}
TRec[i][0]=i;
TRec[i][1]=i+1;
}
for (i=0;i<2;i++) {
printf("%i %in",TRec[i][0],TRec[i][1]);
}
printf("nn");
f1(&TRec); <===================================================== LA
for (i=0;i<4;i++) {
printf("%i %in",TRec[i][0],TRec[i][1]);
}
for (i=0;i<4;i++) {
TRec[i]=(uint *) realloc(TRec[i],3*sizeof(uint));
TRec[i][2]=i;
}
printf("nn");
for (i=0;i<4;i++) {
printf("%i %i %in",TRec[i][0],TRec[i][1],TRec[i][2]);
}
}
J'ai suivi tes instructions, mais j'ai du oublier quelque chose ... Voila mon code modifie
J'ai un Segmentation Fault(coredump) au moment de l'affectation *TRec[i][0]=i;
#include <stdio.h> #include <malloc.h>
void f1(uint ***TRec) { int i;
//*TRec=realloc(*TRec,4*sizeof(**TRec)); *TRec=realloc(*TRec,4*sizeof(uint *)); <===================================================== LA
if (*TRec==NULL) { <===================================================== LA printf("Erreur d'allocation mémoire CheAAAckDouble !!!"); exit(1); }
for (i=2;i<4;i++) { *TRec[i]=malloc(2*sizeof(uint)); <===================================================== LA if (*TRec[i]==NULL) { <===================================================== LA printf("Erreur d'allocation mémoire CheckDouble !!!"); exit(1); } *TRec[i][0]=i; <===================================================== LA (1) *TRec[i][1]=i+1; <===================================================== LA (2) } }
void main(void) {
uint **TRec; int i;
TRec=(uint **) malloc(2*sizeof(uint *)); <===================================================== LA if (TRec==NULL) { printf("Erreur d'allocation mémoire CheckDouble !!!"); exit(1); }
for (i=0;i<2;i++) { TRec[i]=(uint *) malloc(2*sizeof(uint)); if (TRec[i]==NULL) { printf("Erreur d'allocation mémoire CheckDouble !!!"); exit(1); } TRec[i][0]=i; TRec[i][1]=i+1; }
for (i=0;i<2;i++) { printf("%i %in",TRec[i][0],TRec[i][1]); }
printf("nn");
f1(&TRec); <===================================================== LA
for (i=0;i<4;i++) { printf("%i %in",TRec[i][0],TRec[i][1]); }
for (i=0;i<4;i++) { TRec[i]=(uint *) realloc(TRec[i],3*sizeof(uint)); TRec[i][2]=i; }
printf("nn"); for (i=0;i<4;i++) { printf("%i %i %in",TRec[i][0],TRec[i][1],TRec[i][2]); } }
Yves ROMAN
J'ai suivi tes instructions, mais j'ai du oublier quelque chose ... Voila mon code modifie
J'ai un Segmentation Fault(coredump) au moment de l'affectation *TRec[i][0]=i;
#include <stdio.h> #include <malloc.h>
void f1(uint ***TRec) { int i;
//*TRec=realloc(*TRec,4*sizeof(**TRec)); *TRec=realloc(*TRec,4*sizeof(uint *)); <===================================================== LA
if (*TRec==NULL) { <===================================================== LA printf("Erreur d'allocation mémoire CheAAAckDouble !!!"); exit(1); }
for (i=2;i<4;i++) { *TRec[i]=malloc(2*sizeof(uint));
Je ne me souviens jamais des priorités des opérateurs * et []. Dans le doute rajoutes des parenthèses (*TRec)[i] au cas ou il ferait *(TRec[i]) qui va pointer au mauvais endroit si i != 0 Idem dans tout ce qui suit
[...]
J'ai suivi tes instructions, mais j'ai du oublier quelque chose ...
Voila mon code modifie
J'ai un Segmentation Fault(coredump) au moment de l'affectation
*TRec[i][0]=i;
#include <stdio.h>
#include <malloc.h>
void f1(uint ***TRec)
{
int i;
//*TRec=realloc(*TRec,4*sizeof(**TRec));
*TRec=realloc(*TRec,4*sizeof(uint *));
<===================================================== LA
if (*TRec==NULL) { <===================================================== LA
printf("Erreur d'allocation mémoire CheAAAckDouble !!!");
exit(1);
}
for (i=2;i<4;i++) {
*TRec[i]=malloc(2*sizeof(uint));
Je ne me souviens jamais des priorités des opérateurs * et [].
Dans le doute rajoutes des parenthèses
(*TRec)[i]
au cas ou il ferait *(TRec[i]) qui va pointer au mauvais endroit si i != 0
Idem dans tout ce qui suit
J'ai suivi tes instructions, mais j'ai du oublier quelque chose ... Voila mon code modifie
J'ai un Segmentation Fault(coredump) au moment de l'affectation *TRec[i][0]=i;
#include <stdio.h> #include <malloc.h>
void f1(uint ***TRec) { int i;
//*TRec=realloc(*TRec,4*sizeof(**TRec)); *TRec=realloc(*TRec,4*sizeof(uint *)); <===================================================== LA
if (*TRec==NULL) { <===================================================== LA printf("Erreur d'allocation mémoire CheAAAckDouble !!!"); exit(1); }
for (i=2;i<4;i++) { *TRec[i]=malloc(2*sizeof(uint));
Je ne me souviens jamais des priorités des opérateurs * et []. Dans le doute rajoutes des parenthèses (*TRec)[i] au cas ou il ferait *(TRec[i]) qui va pointer au mauvais endroit si i != 0 Idem dans tout ce qui suit
[...]
David Roman CESR
MERCI ca marche pile poil La tu viens de me sortir une belle epine du pied j'aurais jamais trouve ....
MERCI
MERCI ca marche pile poil
La tu viens de me sortir une belle epine du pied
j'aurais jamais trouve ....