Malloc d'un tableau double entree
Nico
-
ilimo Messages postés 32 Statut Membre -
ilimo Messages postés 32 Statut Membre -
J'ai un souci avec le prog ci dessou.En fait apres avoir mon malloc , j'essaie de stocker des valeurs , mais ca fait un segmentation fault , et je vois pas pk.Je doute de mon malloc , mais si il est faux , comment dois-je le faire ?
#include <fcntl.h>
#include <unistd.h>
typedef struct s_data
{
int nbline;
int nbchar;
int fd1;
int test2;
char **tab;
} t_data;
int my_get_line(char *file, t_data dat)
{
int line;
char *buff;
...
return (line);
}
int my_get_char(char *file, t_data dat)
{
int chars;
char *buff;
return (chars);
}
void stocktab(char *file, t_data dat)
{
char buff[1];
int x;
int y;
## ARRIVE LA CA SEGFAULTE ##
**dat.tab = 0;
#OU
dat.tab[0][0] = 0;
#######
}
int main(int ac, char **av)
{
t_data dat;
dat.fd1 = open(av[1], O_RDONLY);
dat.nbline = my_get_line(av[1], dat);
dat.nbchar = my_get_char(av[1], dat);
dat.tab = malloc((dat.nbline * dat.nbchar) * sizeof(**dat.tab));
stocktab(av[1], dat);
}
#include <fcntl.h>
#include <unistd.h>
typedef struct s_data
{
int nbline;
int nbchar;
int fd1;
int test2;
char **tab;
} t_data;
int my_get_line(char *file, t_data dat)
{
int line;
char *buff;
...
return (line);
}
int my_get_char(char *file, t_data dat)
{
int chars;
char *buff;
return (chars);
}
void stocktab(char *file, t_data dat)
{
char buff[1];
int x;
int y;
## ARRIVE LA CA SEGFAULTE ##
**dat.tab = 0;
#OU
dat.tab[0][0] = 0;
#######
}
int main(int ac, char **av)
{
t_data dat;
dat.fd1 = open(av[1], O_RDONLY);
dat.nbline = my_get_line(av[1], dat);
dat.nbchar = my_get_char(av[1], dat);
dat.tab = malloc((dat.nbline * dat.nbchar) * sizeof(**dat.tab));
stocktab(av[1], dat);
}
A voir également:
- Malloc d'un tableau double entree
- Double ecran - Guide
- Tableau word - Guide
- Whatsapp double sim - Guide
- Trier un tableau excel - Guide
- Imprimer un tableau excel - Guide
6 réponses
bonjour,
1- au lieu de :
dat.tab = malloc((dat.nbline * dat.nbchar) * sizeof(**dat.tab));
2- essaies :
dat.tab = (char**)malloc(dat.nbline * dat.nbchar * sizeof(*char));
3- dans ta fonction main :
a- le 2° argument est un double pointeur( char **av )
b- tandis que tu le passes en 1° argument pour les autres fonctions
c- mieux vaut respecter l'ordre des passages
d- en plus ce premier argument pour les autres fonctions, est un simple pointeur( char *file )
e- il faut passer des arguments du même type d'une fonction à une autre
4- Dans ta fonction " stocktab " il y une mise à zero :
::: **dat.tab = 0; : non pour les doubles étoiles
::: dat.tab[0][0] = 0; : non car ce n'est pas un tableau à 2 dimensions
5- essaies : dat.tab[0] = NULL;
::: c'est un tableau de pointeurs sur des pointeurs
6- en ce qui concerne " dat.fd1 = open(av[1], O_RDONLY); "
il me semble que " open " c'est pour ouvrir des fichiers..
tandis qu'ici on a un tableau " av[1] ".
je ne saisis pas exactement ce que tu veux faire..
donc je n'ai pas d'idée..
7- j'espère que ça aide..
1- au lieu de :
dat.tab = malloc((dat.nbline * dat.nbchar) * sizeof(**dat.tab));
2- essaies :
dat.tab = (char**)malloc(dat.nbline * dat.nbchar * sizeof(*char));
3- dans ta fonction main :
a- le 2° argument est un double pointeur( char **av )
b- tandis que tu le passes en 1° argument pour les autres fonctions
c- mieux vaut respecter l'ordre des passages
d- en plus ce premier argument pour les autres fonctions, est un simple pointeur( char *file )
e- il faut passer des arguments du même type d'une fonction à une autre
4- Dans ta fonction " stocktab " il y une mise à zero :
::: **dat.tab = 0; : non pour les doubles étoiles
::: dat.tab[0][0] = 0; : non car ce n'est pas un tableau à 2 dimensions
5- essaies : dat.tab[0] = NULL;
::: c'est un tableau de pointeurs sur des pointeurs
6- en ce qui concerne " dat.fd1 = open(av[1], O_RDONLY); "
il me semble que " open " c'est pour ouvrir des fichiers..
tandis qu'ici on a un tableau " av[1] ".
je ne saisis pas exactement ce que tu veux faire..
donc je n'ai pas d'idée..
7- j'espère que ça aide..
très bien ..
la chose est simple :
1- ecrire un entier type " int " dans un fichier texte : "save.txt"
2- relire ce même entier dans un seconde temps pour s'en servir..
1-
a- pour ecrire : voici mon code :
void WriteToFile( int a = 1234)
{
FILE *ff;
ff = fopen("save.txt", "w");
char st[5];
itoa(a, st, 10);
fwrite (st , 1 , 4 , ff);
fclose(ff);
}
b- le probleme c'est que ça efface le contenu de tout mon fichier save, et je voudrais ajouter uniquement au début en effaçant la première ligne..
2-
a- pou lire : voici mon code :
void ReadFile(int b = 0)
{
FILE *fread;
fread = fopen("save.txt", "r");
char Txt[255];
fgets(Txt, 255, fread);
b = atoi(Txt);
fclose(fread);
}
une idée ?..
merci...
la chose est simple :
1- ecrire un entier type " int " dans un fichier texte : "save.txt"
2- relire ce même entier dans un seconde temps pour s'en servir..
1-
a- pour ecrire : voici mon code :
void WriteToFile( int a = 1234)
{
FILE *ff;
ff = fopen("save.txt", "w");
char st[5];
itoa(a, st, 10);
fwrite (st , 1 , 4 , ff);
fclose(ff);
}
b- le probleme c'est que ça efface le contenu de tout mon fichier save, et je voudrais ajouter uniquement au début en effaçant la première ligne..
2-
a- pou lire : voici mon code :
void ReadFile(int b = 0)
{
FILE *fread;
fread = fopen("save.txt", "r");
char Txt[255];
fgets(Txt, 255, fread);
b = atoi(Txt);
fclose(fread);
}
une idée ?..
merci...
désolé, je me suis trompé de section..
je sais pas pourquoi j'ai reçu une réponse sur ce message..
en pensant que ça concernait mon message, je ai répondu..
une erreur..
désolé encoe..
je sais pas pourquoi j'ai reçu une réponse sur ce message..
en pensant que ça concernait mon message, je ai répondu..
une erreur..
désolé encoe..
La ligne contenant le malloc effectivement me semble bizarre. Mais l'erreur principale de ce programme c'est que deux "*" devant une variable ne signifie pas tableau a deux dimension mais poiteur poitant sur un autre pointeur. Donc, il suffit d'une seul étoile. C'est probalement pour ca que ton programme plante a l'éxecution (et pas a la compilation). Après ca ne t'empêche pas d'assigner des valeurs sur deux dimensions dans ton pointeurs.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question