begin process at 2012 02 10 11:14:40
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

compilation mai au lancement "erreur la memoire ne peu pas pas etre read"


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

compilation mai au lancement "erreur la memoire ne peu pas pas etre read"

vendredi 23 décembre 2005 à 10:44:54 | compilation mai au lancement "erreur la memoire ne peu pas pas etre read"

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");
}

vendredi 23 décembre 2005 à 11:23:10 | Re : compilation mai au lancement "erreur la memoire ne peu pas pas etre read"

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.


vendredi 23 décembre 2005 à 11:24:32 | Re : compilation mai au lancement "erreur la memoire ne peu pas pas etre read"

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;
}
vendredi 23 décembre 2005 à 11:25:00 | Re : compilation mai au lancement "erreur la memoire ne peu pas pas etre read"

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+
vendredi 23 décembre 2005 à 11:26:29 | Re : compilation mai au lancement "erreur la memoire ne peu pas pas etre read"

cosmobob

bon ben on t'a tous répondu en meme temps
vendredi 23 décembre 2005 à 11:38:02 | Re : compilation mai au lancement "erreur la memoire ne peu pas pas etre read"

luhtor

Effectivement, et en plus pour dire la meme chose. :)
vendredi 23 décembre 2005 à 14:59:49 | Re : compilation mai au lancement "erreur la memoire ne peu pas pas etre read"

Joky

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

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

vendredi 23 décembre 2005 à 15:31:52 | Re : compilation mai au lancement "erreur la memoire ne peu pas pas etre read"

touny23

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


Cette discussion est classée dans : int, printf, tab, for, matrice


Répondre à ce message

Sujets en rapport avec ce message

Problem Affichage de mon Tableau [ par Orezza ] salut à tous, j'ai un blem à l'affichage du tableau. l'utilisateur parametre son tableau, c lui qui l'initilize mais j'arrive pas à afficher apres le help une fonction qui a besoin de vous [ par natacha86 ] Re bonjour a tout le monde, voila j'ai mis tout le prog si vous voulez tester, en fait le pb viens de la fonctino tri_shell(), je ne sais pas pkoi ell pb en c urgenttttttttttttttttt [ par natacha86 ] bonjour, j'ai un probleme avec mon programme, il ne veut pas sortir, j'ai fais un menu et apparement ya un bug mais je ne comprend rien.le code est as Return tableau? [ par zut69 ] Bonjour,Je suis en train d'écrire un petit programme sur les matrices en C, mais vu que je veux faire quelque chose d'assez général, j'ai besoin que d Produit matriciel en c renvoit des valeurs complètement fausses [ par bilel59 ] Bonjout à tous, je sollicite votre aide pour la raison indiquée dans le titre, en effet le produif matriciel que j'effectue renvoit des valeurs vraime Problème générateur de grille de sudoku en C [ par Dovah ] Bonjour, je suis débutant en programmation, et pour m'entraîner j'ai décidé de créer un programme qui génère aléatoirement une grille de sudoku en C fonction en c [ par badsha ] j'ai un code qui inverse une matrice et je veux l'appliquer sur plusieurs matrices je n'arrive pas à mettre à l'entrée de la fonction des matrices, je la programmation de l'algorithme du simplexe [ par soums2009 ] salut à tous j'ai un probleme  avec mon code qui implemente l'algoritme du symplexe et je sollicite votre aide pour pouvoir terminer et rendre mon dev


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,619 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales