Accueil > Forum > > > > répétition d'allocation, désallocation de mémoire sur des matrices
répétition d'allocation, désallocation de mémoire sur des matrices
mardi 8 novembre 2005 à 16:13:30 |
répétition d'allocation, désallocation de mémoire sur des matrices

BouiB1
|
Bonjour a tous !
pour mes cours j'ai besoin de faire un petit programme de résolution de
systèmes linéaires. Le problème n'est pas dans l'lgorithme de calcul
comme vous pouvez le lire dans le titre mais plus dans la gestiond e la
mémoire. En effet, le programme lit des matrices dans un fichier texte
et ajuste la taille de la matrice en fonction des besoins (le rang de
la matrice est indiqué dans le fichier). Une fois fini on lance le
calcul et on affiche le résultat. L'utilisateur peut alors décider de
lire une nouvelle matrice dans le fichier (elle peut être plus grande
ou plus petite). Et c'est justement à partir de la que ça ce complique. Mon programme ressemble à ça (ce n'est qu'une structure ne faites pas attention a la syntaxe car c'est tout sauf du c ^^) :
lire taille matrice <---,
allouer_matrice |
lire données |
calcul
|
afficher données |
désallouer matrice |
recommencer ? ---'
void allouer_matrice(int nb_lignes, int nb_colonnes, matrice mat_p)
{
mat_p=realloc(mat_p,(nb_lignes+1)*sizeof(vecteur));
if (mat_p == NULL)
{
printf("\n /!\\ Manque d'espace memoire mat col\n");
getch();
exit(1);
}
for(i=1;i<=nb_lignes;i++)
{
mat_p[i]=realloc(mat_p[i],nb_colonnes*sizeof(double));
if (mat_p)[i] == NULL)
{
printf("\n /!\\ Manque d'espace memoire mat lignes %d\n",i);
getch();
exit(1);
}
}
}
void free_mat(int nb_lignes, matrice mat_p)
{
for(i=1;i<=nb_lignes;i++)
{
free(mat_p[i]);
mat_p[i]=NULL;
}
free(mat_p);
}
|
|
mardi 8 novembre 2005 à 16:37:17 |
Re : répétition d'allocation, désallocation de mémoire sur des matrices

DeAtHCrAsH
|
Ou est le problème ? Tu as des plantages ? Des erreurs de compilations ?
Donne plus d'info...
Shell
|
|
mardi 8 novembre 2005 à 16:42:54 |
Re : répétition d'allocation, désallocation de mémoire sur des matrices

BouiB1
|
autant pour moi ! ca compile pas mais j'arrive pas à allouer plusieurs fois de suite la même matrice et le programme fini par planter. du style : "l'instruction à "0x7c94426d" emploie l'adresse mémoire "0x00000000". La mémoire ne peut pas être "read". " ou bien j'arrive a exécuter sur plusieurs exemples et puis sur un exemple le programme quitte sans message d'erreur.
|
|
mardi 8 novembre 2005 à 17:07:24 |
Re : répétition d'allocation, désallocation de mémoire sur des matrices

DeAtHCrAsH
|
Lorsque tu fais un free(mat_p) tu detruit ta variable. Elle pointe donc nullpart, c'est pourquoi tu ne peut pas alloué ensuite.
Met cette ligne en commentaire et testes.
Shell
|
|
mardi 8 novembre 2005 à 17:15:38 |
Re : répétition d'allocation, désallocation de mémoire sur des matrices

DeAtHCrAsH
|
En fait le free_mat(...) ne doit etre appeller qu'a la fin du programme. A chaque fois que tu veux gerer une nouvelle matrice, appelle directement allouer_matrice(...), sans passer par free_met(...).
realloc(...), réalloue une zone mémoire comme sont nom l'indique. Cette fonction redimenssione donc ta variable en conséquence, qu'elle soit plus petite ou plus grande. Si ta variable vaut null, alors realloc appelle malloc, sinon la réallocation se fait sur le tas.
Shell
|
|
mardi 8 novembre 2005 à 17:37:38 |
Re : répétition d'allocation, désallocation de mémoire sur des matrices

BouiB1
|
merci ça précise ma pensée ! donc avec ce changement je peut allouer la meme matrice autant de fois que je veux mais quand je change d'exemple ... parfois je me retrouve avec le même type d'erreurs
en fait j'ai régler le problème qui était sur l'allocation des vecteurs : je suis obliger d'allouer nb_lignes+1 sinon ca plante ...
merci beaucoup shell ! j'y voit un peu plus clair maintenant
|
|
mercredi 9 novembre 2005 à 18:50:09 |
Re : répétition d'allocation, désallocation de mémoire sur des matrices

BouiB1
|
et c'est pas fini ^^
en fait j'ai pas de soucis en allouant une matrice et deux vecteurs.
Dans un second alogorithme j'ai plus de variable a allouer : trois
matrices et trois vecteurs dans cet ordre : matrice, vecteur, matrice,
matrice et les deux autres vecteurs. ca plante justement lors de
l'allocation des deux derniers vecteurs. si je change l'ordre
d'allocation (par exemple les deux derniers vcteurs avant les matrices)
c'est sur les matrices que ca plante (message d'erreur du style la
mémoire ne peut être lue blabla). je veu bien a nouveau un petit coup
de main :-D merci d'avance !
|
|
lundi 14 novembre 2005 à 16:13:46 |
Re : répétition d'allocation, désallocation de mémoire sur des matrices

BouiB1
|
Et bien je chercher mais sans trouver. J'ai beau alloué dans tous les
sens et il y a rien à y faire dev-c++ compile exécute mais au bout de
quelques allocations ca plante. Si quel'qu'un veu bien me donner un
dernier coup de pouce ce serait tres sympa. Merci d'avance.
|
|
lundi 14 novembre 2005 à 16:43:25 |
Re : répétition d'allocation, désallocation de mémoire sur des matrices

BouiB1
|
pour pouvoir trouver l'erreur j'ai fait un programme simplifié qui alloue a répétition des matrices :
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
typedef double *vecteur;
typedef vecteur *matrice;
void allouer_matrice(int nb_lignes, int nb_colonnes, matrice *A);
void allouer_vecteur(int nb_lignes, int nb_colonnes, vecteur *V);
int main(void)
{
int i;
matrice A,B,C,D,E,F,G;
vecteur H,I,J,K,L;
for(i=0;i<=100;i++)
{
printf("\niteration %d :",i);
allouer_matrice(20,20,&A);
printf("mA ");
allouer_matrice(20,20,&B);
printf("mB ");
allouer_matrice(20,20,&C);
printf("mC ");
allouer_vecteur(20,0,&H);
printf("vH ");
allouer_vecteur(20,0,&I);
printf("vI ");
allouer_matrice(20,20,&D);
printf("mD ");
allouer_matrice(20,20,&E);
printf("mE ");
allouer_vecteur(20,0,&J);
printf("vJ ");
allouer_vecteur(20,0,&K);
printf("vK ");
allouer_vecteur(20,0,&L);
printf("vL ");
allouer_matrice(20,20,&G);
printf("mG ");
}
getch();
}
void allouer_matrice(int nb_lignes, int nb_colonnes, matrice *A)
{
int i;
*A=malloc(nb_lignes*sizeof(vecteur));
if (*A == NULL)
{
printf("\n /!\\ Manque d'espace memoire mat col\n");
getch();
exit(1);
}
for(i=1;i<=nb_lignes;i++)
{
(*A)[i]=malloc(nb_colonnes*sizeof(double));
if ((*A)[i] == NULL)
{
printf("\n /!\\ Manque d'espace memoire mat lignes %d\n",i);
getch();
exit(1);
}
}
}
void allouer_vecteur(int nb_lignes, int nb_colonnes, vecteur *V)
{
int i;
*V=malloc((nb_lignes+1)*sizeof(double));
if (*V == NULL)
{
printf("\n /!\\ Manque d'espace memoire vect\n");
getch();
exit(1);
}
}
|
|
Cette discussion est classée dans : lire, lignes, nb, matrice, mat
Répondre à ce message
Sujets en rapport avec ce message
Problème pour dériver une classe [ par arc59 ]
J'ai créé une classe Matrice comportant des fonctions get_ele, set_ele (toutes les 2 sont "virtual") et la redéfinition de l'opérateur +.Dans ma class
[C] lignes d'un fichier dans un tableau : Segmentation fault [ par Michel76 ]
Bonjour,Pardonnez-moi de cette question de débutant.Soit un fichier contenant :-----001002-----Je souhaiterais mettre chacune des lignes de ce fichier
lire fichier ligne par ligne [ par mat74 ]
salut a ts je voudrai savoir comment je pourrai lire un fichier lignes par lignes . par exemple une fonction qui me permerttrai de recuperer la ligne
ArrayList (C#) vers int ** [ par typhoonx ]
Bonjour, je voudrai réaliser une conversion d'un ArrayList contenant un ArrayList pour chaque case du premier ArrayList en int ** dans le but d'appele
Multiplication d'une matrice par un scalaire [ par skrime ]
Bonjour, j'ai un exercice à faire qui consiste à multiplier une matrice par un scalaire en C (la prof ne veut pas qu'on se serve des boucles FOR), je
Manipulation de matrices en C. [ par T TeKa K ]
Hello les gens! Je viens quemander de l'aide afin de me sortir de ce programme qui me prend la tete. But de l'exericice: creer un programme qui m
Lire un fichier txt contenant des nombres [ par wwalker ]
Je souhaite qu'une variable integer prennent successivement les valeurs contenus dans un fichier txt.Forme du fichier nombres.txt:123445677890...Voila
lire plusieurs lignes d'un fichier text [ par oudkaramla ]
salut à tous,j'ai un problème: j'ai un fichier texte contenant quatre lignes.moi je veux lire ces quatre lignes et les stocker chacun dans une variabl
MULTIPLICATION D'UNE MATRICE PAR UN VECTEUR [ par jfk20004 ]
Quelqu'un pourrait il m'expliquer le bout de code suivant tiré d'un prog de raytrace .Cette partie est censée multiplier une matriceet un vecteur.Je n
lire d'une ficjier texte et affichage d'une matrice [ par Stiko ]
slt,j ai un fichier texte danslequele se trouve une matrice dont les membres sonr séparés par des point- virgule.comment par un programme C++ je peux
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Forum
MATLAB PROGRAMME MATLAB PROGRAMME par wahab1087
Cliquez pour lire la suite par wahab1087 RGB2GRAYRGB2GRAY par musa18
Cliquez pour lire la suite par musa18
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|