begin process at 2008 07 20 09:24:40
1 213 150 membres
71 nouveaux aujourd'hui
14 166 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : compilation mai au lancement "erreur la memoire ne peu pas pas etre read" [ Archives / Au secours ] (touny23)

compilation mai au lancement "erreur la memoire ne peu pas pas etre read" le 23/12/2005 10:44:54

touny23

je maitrise pas tro le C.mai comme j ai un projet a faire dessus pour la rentré , je sui obligé de m y mettre .
j arrive a compiler sous dev-cpp mai lors de l execution j ai cette erreur qui apparait :
L'instruction à "0*0040148a" emploie l adresse mémoire "0*00000000".La mémoire ne peut pas etre"read".
cliquez sur OK pour terminer le programme.
cliquez sur Annuler pour déboguer le programme

je sai pas d ou ça vien

je vous envoie le programme : si vous pouviez m aider ça m arrnagerai enormement ...sinon j essaierai sous unix a la rentrée ...merci d avance

#include<stdio.h>
#include<stdlib.h>
struct matrice {
                int dim1;
                int dim2;
                int type;
                double **tab;
                };
void creation (struct matrice M)
{
int i,j;
printf("creation d'une matrice!!!!\n");
printf("entrer la 1e dimension=");
scanf("%d",&M.dim1);
printf("entrer la 2e dimension=");
scanf("%d",&M.dim2);
printf("entrer le type de la matrice=\n");
printf("1-matrice pleine\n");
printf("2-matrice triangulaire inférieure\n");
printf("3-matrice triangulaire supérieure\n");
scanf("%d",&M.type);
if(M.type==1){
              M.tab=(double **)malloc(M.dim1*sizeof(double *));
              if(M.tab==NULL)printf("echec allocation mémoire\n");
              for(i=0;i<M.dim1;i++)
              {
              M.tab[i]=(double *)malloc(M.dim2*sizeof(double));
              if(M.tab[i]==NULL)
                                {for(j=0;j<i;j++){
                                                  free(M.tab[j]);
                                                  printf("echec allocation mémoire\n");
                                                  }
                                }
              }
printf("chiffre de la matrice??");
for(i=0;i<M.dim2;i++){
                     printf("%d e ligne\n",i);
                     for(j=0;j<M.dim1;j++)scanf("%lf",&M.tab[i][j]);
                     }
              }
}

void affichage(struct matrice M)
{
int i,j;    
for(i=0;i<M.dim2;i++){
                     for(j=0;j<M.dim1;j++){printf("%lf",M.tab[i][j]);}
                     printf("\n");
                     }
}

main()
{
struct matrice M1;
creation(M1);
affichage(M1);
system("pause");
}


Re : compilation mai au lancement "erreur la memoire ne peu pas pas etre read" le 23/12/2005 11:23:10

luhtor
Tu te mélanges les pinceaux avec le passage d'argument. Tu oublies qu'un argument n'est qu'une copie de l'objet initial. Donc si tu modifies la copie, ca change rien à l'objet initial. Donc quand tu fais affichage(M1). Tu affiches une matrice qui n'est pas encore initialisée.
Faut faire des passages par référence, (avec & si tu fais du C++, ou par pointeur, si tu fais de C).

Bon mais ca doit pas etre la seule erreur, mais essai de mieux le présenter, la c'est pénible à déchiffrer.
Tu vois ce genre de chose est étrange:
if(M.tab==NULL)
    printf("echec allocation mémoire\n");
for(i=0;i<M.dim1;i++)
{
M.tab[i]=(double *)malloc(M.dim2*sizeof(double));
...

Ya une erreur d'allocation, mais tu vas quand meme allouer tous les éléments de la matrice ...

Bon aller cyao.



Re : compilation mai au lancement "erreur la memoire ne peu pas pas etre read" le 23/12/2005 11:24:32

theguitou
Il y a un pb avec ta structure. Le code ci dessous marche. Mais essay quand même de comprendre !!

// tester sous linux.

#include<stdio.h>
#include<stdlib.h>

typedef struct {
                int dim1;
                int dim2;
                int type;
                double **tab;
                }matrice;

void creation (matrice *M)
{
int i,j;
printf("creation d'une matrice!!!!\n");
printf("entrer la 1e dimension=");
scanf("%d",&M->dim1);
printf("entrer la 2e dimension=");
scanf("%d",&M->dim2);
printf("entrer le type de la matrice=\n");
printf("1-matrice pleine\n");
printf("2-matrice triangulaire inférieure\n");
printf("3-matrice triangulaire supérieure\n");
scanf("%d",&M->type);
if(M->type==1){
              M->tab=(double **)malloc(M->dim1*sizeof(double *));
              if(M->tab==NULL)printf("echec allocation mémoire\n");
              for(i=0;i<M->dim1;i++)
              {
              M->tab[i]=(double *)malloc(M->dim2*sizeof(double));
              if(M->tab[i]==NULL)
                                {for(j=0;j<i;j++){
                                                  free(M->tab[j]);
                                                  printf("echec allocation mémoire\n");
                                                  }
                                }
              }
printf("chiffre de la matrice??");
for(i=0;i<M->dim2;i++){
                     printf("%d e ligne\n",i);
                     for(j=0;j<M->dim1;j++)scanf("%lf",&M->tab[i][j]);
                     }
              }
}

void affichage(matrice M)
{
int i,j;   
for(i=0;i<M.dim2;i++){
                     for(j=0;j<M.dim1;j++){printf("%lf",M.tab[i][j]);}
                     printf("\n");
                     }
}

int main()
{
matrice M1;
creation(&M1);
affichage(M1);
system("pause");
 return 0;
}

Re : compilation mai au lancement "erreur la memoire ne peu pas pas etre read" le 23/12/2005 11:25:00

cosmobob
salut,
tu dois passer ta structure matrice par un pointeur.

void creation (struct matrice* M)
{
// remplacer M. par M->
}

dans ton main:
main()
{
    struct matrice M1;
    creation(&M1);
    affichage(M1);
    system("pause");
}

en C, tu ne peux pas modifier un objet que tu passes par valeur dans un procedure.
Si tu veux le modifier, tu dois le passer par adresse (avec un pointeur)

a+

Re : compilation mai au lancement "erreur la memoire ne peu pas pas etre read" le 23/12/2005 11:26:29

cosmobob
bon ben on t'a tous répondu en meme temps

Re : compilation mai au lancement "erreur la memoire ne peu pas pas etre read" le 23/12/2005 11:38:02

luhtor
Effectivement, et en plus pour dire la meme chose. :)

Re : compilation mai au lancement "erreur la memoire ne peu pas pas etre read" le 23/12/2005 14:59:49

Joky
Membre Club
Tu dois passer par un pointeur sur ta structure ;)
Oups :)
Trop tard !
Lol

if(!Meilleur("Joky")) return ERREUR;<


Re : compilation mai au lancement "erreur la memoire ne peu pas pas etre read" le 23/12/2005 15:31:52

touny23
merci de vos réponses si rapides. je vai essayer de comprendre maintenant


Classé sous : int, printf, tab, for, matrice

Participer à cet échange

Pub



Appels d'offres

Dessins techniques
Budget : 60€
Animation Flash - Doma...
Budget : 370€
Application flash medi...
Budget : 1 000€

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS