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)

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é 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 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 aide sur un prog [ par jsuititidu27 ] Bonjour, j'ai besoin d'un petit coup de main. ceci est un exo qui demande d'écrire un programme de tri de chaines de caractères. J'ai donc écrit le co HELP [ par alex64100 ] BONOURje doit réaliser un   prog de tri de caractèresvoici mon code#include #include #include #include int main (int argc,  char ar algorithme de greedy [ par starbluesky ] <link rel="Fi class matrice [ par ciaonataha ] J'ai ecrit le programme classe matrice...mais j'ai les error comme:"matrice.cpp:269: error: no match for 'operator=' in 'b = matrice::Mat_decomposer(a


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

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

Comparez les prix Nouvelle version


HTC G1

Entre 449€ et 449€


Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,250 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.