Allocation matrice de char uniquement avec malloc
Résolu/Fermé
glupidon
-
Modifié par Whismeril le 8/02/2015 à 11:24
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 - 19 févr. 2015 à 14:17
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 - 19 févr. 2015 à 14:17
A voir également:
- Malloc char**
- Coco char - Accueil - Réseaux sociaux
- C'est quoi le site qui remplace coco chat ✓ - Forum Réseaux sociaux
- Char ai - Accueil - Guide technologies
- Expecting value: line 1 column 1 (char 0) ✓ - Forum MacOS
- Coco chat connexion sur mobile, le tchat est fermé ? ✓ - Forum Réseaux sociaux
7 réponses
sambia39
Messages postés
610
Date d'inscription
vendredi 31 juillet 2009
Statut
Membre
Dernière intervention
9 février 2023
49
Modifié par sambia39 le 8/02/2015 à 14:59
Modifié par sambia39 le 8/02/2015 à 14:59
Bonjour
je n'ai pas lu en totalité ton code source précédent à savoir la création d'une matrice de caractère N*N car tu t'es écarté de ton objectif à la ligne 8. Je ne sais pas ce que tu as voulu à faire, mais voici un exemple d'allocation mémoire d'une matrice N*N (sans le contrôle d'allocation correcte ), son remplissage par le caractère A et la dé-allocation mémoire de celle-ci.
à bientôt
Celui qui peut, agit. Celui qui ne peut pas, enseigne. Il y a deux sortes de savants: les spécialistes, qui connaissent tout sur rien, et les philosophes, qui ne connaissent rien sur tout. G.B Shaw
je n'ai pas lu en totalité ton code source précédent à savoir la création d'une matrice de caractère N*N car tu t'es écarté de ton objectif à la ligne 8. Je ne sais pas ce que tu as voulu à faire, mais voici un exemple d'allocation mémoire d'une matrice N*N (sans le contrôle d'allocation correcte ), son remplissage par le caractère A et la dé-allocation mémoire de celle-ci.
à bientôt
#include <stdio.h> #include <stdlib.h> #define _BUFF_ 5 int main( void ){ unsigned int i = 0; unsigned int j = 0; /* Allocation de la matrice */ char **p_str = (char**)malloc( _BUFF_ * sizeof(char*) ); for( i = 0; i< _BUFF_; i++ ){ p_str[i] = (char*)malloc( _BUFF_ * sizeof(char) ); } /* Remplissage de la matrice */ for( i = 0; i <_BUFF_; i++){ for( j = 0; j <_BUFF_; j++ ){ p_str[i][j] = (char)( (33+i)+j ); } } /* Affichage de la matrice */ for( i = 0; i < _BUFF_; i++ ){ printf("%3d|\t ", i ); for( j = 0; j < _BUFF_; j++ ){ printf("%c\t", p_str[i][j] ); } printf("\n"); } /* Free memoire */ for( i = 0; i < _BUFF_; i++ ){ free( p_str[i] ); p_str[i] = NULL; } free( p_str ); p_str = NULL; return( EXIT_SUCCESS ); }
Celui qui peut, agit. Celui qui ne peut pas, enseigne. Il y a deux sortes de savants: les spécialistes, qui connaissent tout sur rien, et les philosophes, qui ne connaissent rien sur tout. G.B Shaw
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 841
8 févr. 2015 à 19:44
8 févr. 2015 à 19:44
Bonjour,
**map = (char **)malloc(sizeof(char*) * 11);
*map2 = (char *)malloc(sizeof(char) * 42 * 11);
map n'est pas initialisé, tu ne peux donc pas pointer vers une valeur.
Il faut plutôt faire : map=malloc(sizeof(char*) * 11);
Note : le cast est superflu, voire même déconseillé.
De même : map2=malloc(42*11);
Note : j'ai retiré sizeof(char) car il vaut systématiquement 1. Mais tu peux le laisser sans souci.
while (i < 11)
{
i++;
map[i] = &map2[i * 42];
}
Dommage, tu fais i++; juste avant map[i]. Du coup, map[0] n'est pas initialisé. Il suffit de le mettre après.
map[i] est un char. Donc tu peux pas mettre un char** dedans. Que souhaites-tu faire ici ?
Cdlt,
**map = (char **)malloc(sizeof(char*) * 11);
*map2 = (char *)malloc(sizeof(char) * 42 * 11);
map n'est pas initialisé, tu ne peux donc pas pointer vers une valeur.
Il faut plutôt faire : map=malloc(sizeof(char*) * 11);
Note : le cast est superflu, voire même déconseillé.
De même : map2=malloc(42*11);
Note : j'ai retiré sizeof(char) car il vaut systématiquement 1. Mais tu peux le laisser sans souci.
while (i < 11)
{
i++;
map[i] = &map2[i * 42];
}
Dommage, tu fais i++; juste avant map[i]. Du coup, map[0] n'est pas initialisé. Il suffit de le mettre après.
map[i] est un char. Donc tu peux pas mettre un char** dedans. Que souhaites-tu faire ici ?
Cdlt,
merci pour la correction
vraiment ?
pourquoi sa ?
vraiment ?
pourquoi sa ?
ElementW
Messages postés
4816
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
5 octobre 2021
1 228
>
Utilisateur anonyme
8 févr. 2015 à 11:24
8 févr. 2015 à 11:24
ça ne doit même pas exister.Si, si, ça existe en C#, mais ça requiert de créer du code unsafe, et ça peut être "dangereux".
ha oui d'accord XD
je voie ou est le problème ....
il s'agit bien de C dans ce cas .
je viens de comprendre que C et C# sont deux langage bien différent ...
pour moi le c# n'était qu'une appellation pour langage c
je te remercie de ton intervention
je dormirais moins con ce soir XD
du coup je fait comment pour bouger mon sujet de catégorie ?
je voie ou est le problème ....
il s'agit bien de C dans ce cas .
je viens de comprendre que C et C# sont deux langage bien différent ...
pour moi le c# n'était qu'une appellation pour langage c
je te remercie de ton intervention
je dormirais moins con ce soir XD
du coup je fait comment pour bouger mon sujet de catégorie ?
J'ai déplacé ton sujet, il faut être Contributeur ou Modérateur pour pouvoir le faire et recorrigé la coloration.
Par j'ai quand même cherché, les pointeurs existent en C#, mais uniquement dans des cas particuliers https://docs.microsoft.com/fr-fr/dotnet/csharp/programming-guide/unsafe-code-pointers/
Par j'ai quand même cherché, les pointeurs existent en C#, mais uniquement dans des cas particuliers https://docs.microsoft.com/fr-fr/dotnet/csharp/programming-guide/unsafe-code-pointers/
Bonjour ,
merci a tous pour vos réponses !
je vais enfin pouvoir continué a avancer !
fiddy ,
je cherche a stocker dans chaque ligne de ma matrice
une chaine de caractère qui changera durant le programme (a chaque ligne )
cette chaine de caractère contiens uniquement des espace et des "|" d'où les char !
je me demande si avec une tel matrice c'est envisageable ou non ?
merci a tous pour vos réponses !
je vais enfin pouvoir continué a avancer !
fiddy ,
je cherche a stocker dans chaque ligne de ma matrice
une chaine de caractère qui changera durant le programme (a chaque ligne )
cette chaine de caractère contiens uniquement des espace et des "|" d'où les char !
je me demande si avec une tel matrice c'est envisageable ou non ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
sambia39
Messages postés
610
Date d'inscription
vendredi 31 juillet 2009
Statut
Membre
Dernière intervention
9 février 2023
49
Modifié par sambia39 le 9/02/2015 à 14:42
Modifié par sambia39 le 9/02/2015 à 14:42
Bonjour
Dans mon ancien poste ligne 17 à 22 à ton avis qu'est ce que c'est ? aprés c'est à toi de l'adapté
Celui qui peut, agit. Celui qui ne peut pas, enseigne. Il y a deux sortes de savants: les spécialistes, qui connaissent tout sur rien, et les philosophes, qui ne connaissent rien sur tout. G.B Shaw
Dans mon ancien poste ligne 17 à 22 à ton avis qu'est ce que c'est ? aprés c'est à toi de l'adapté
/* Remplissage de la matrice */ for( i = 0; i <_BUFF_; i++){ for( j = 0; j <_BUFF_; j++ ){ p_str[i][j] = (char)( (33+i)+j ); } }
Celui qui peut, agit. Celui qui ne peut pas, enseigne. Il y a deux sortes de savants: les spécialistes, qui connaissent tout sur rien, et les philosophes, qui ne connaissent rien sur tout. G.B Shaw
merci pour vos nombreuses aide !
sa fonctionne enfin !
passer une bonne journée !
sa fonctionne enfin !
passer une bonne journée !
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
19 févr. 2015 à 14:17
19 févr. 2015 à 14:17
En C99, on peut faire comme cela :
#include <stdio.h> #include <stdlib.h> int main(void) { size_t lignes = 20; size_t colonnes = 10; char (*map)[colonnes] = malloc(sizeof(char[lignes][colonnes])); map[15][5] = '|'; free(map); return 0; }
Utilisateur anonyme
8 févr. 2015 à 11:03
8 févr. 2015 à 11:03
Bonjour, je me suis permis de corriger ta coloration syntaxique en précisant que le langage est C# puisque c'est la catégorie que tu as choisie.
Et c'est là que ça pique les yeux comme tu dis... Ça ne ressemble pas du tout à du c#....
Et c'est là que ça pique les yeux comme tu dis... Ça ne ressemble pas du tout à du c#....