Allouer de la mémoire pour une structure avec un pointeur de caractère en C
J'avais du mal à fixer un code aujourd'hui, puis-je venir à travers quelque chose de similaire à:
typedef struct {
int a;
int b;
int c;
int d;
char* word;
} mystruct;
int main(int argc, char **argv){
mystruct* structptr = malloc(sizeof(mystruct));
if (structptr==NULL) {
printf("ERROR!")
...
}
...
free(structptr);
return 0;
}
le code a été de donner beaucoup d'erreurs de mémoire en raison du fait, que char* word
est une chaîne de caractères de longueur variable, et le malloc a été de ne pas allouer suffisamment de mémoire pour elle. En fait, c'est seulement l'allocation de 20 Bytes
pour l'ensemble de la struct
. Est-il un moyen de contourner ce problème, sans tourner la char*
dans qqch comme char word[50]
?
vu que tu avais un commentaire, mais ensuite retiré. Merci d'éditer votre question avec plus d'informations ou pour soumettre une deuxième question. Il existe des méthodes pour faire face à une
J'ai ajouté le commentaire puis trouvé la réponse dans les commentaires ci-dessous. Je crois, fixe taille de la mémoire tampon est effectivement la meilleure solution, car la parole représentera un nom et les noms ne devrait pas être aussi longue comme un roman 😉 . Merci pour l'aide. J'étais vraiment curieux à propos de l'allocation de mémoire pour les variables chaînes de caractères, c'est pourquoi j'ai demandé. Mais j'allais passer à longueur fixe des tableaux de toute façon.
ces jours-ci un espace (RAM) est abondante, donc dans la plupart des cas, la définition d'un tableau de caractères aussi grand que 1024 ne cause pas un problème. Tampons d'e/S sont systématiquement beaucoup plus que cela.
De toute évidence, vous ne comprenez pas les pointeurs très bien. Veuillez lire sur les pointeurs et les tableaux (par exemple, ici)
Double Possible de l'Allocation de la mémoire pour le char array
char
vecteur de changements dans la longueur.J'ai ajouté le commentaire puis trouvé la réponse dans les commentaires ci-dessous. Je crois, fixe taille de la mémoire tampon est effectivement la meilleure solution, car la parole représentera un nom et les noms ne devrait pas être aussi longue comme un roman 😉 . Merci pour l'aide. J'étais vraiment curieux à propos de l'allocation de mémoire pour les variables chaînes de caractères, c'est pourquoi j'ai demandé. Mais j'allais passer à longueur fixe des tableaux de toute façon.
ces jours-ci un espace (RAM) est abondante, donc dans la plupart des cas, la définition d'un tableau de caractères aussi grand que 1024 ne cause pas un problème. Tampons d'e/S sont systématiquement beaucoup plus que cela.
De toute évidence, vous ne comprenez pas les pointeurs très bien. Veuillez lire sur les pointeurs et les tableaux (par exemple, ici)
Double Possible de l'Allocation de la mémoire pour le char array
OriginalL'auteur H_squared | 2013-08-15
Vous devez vous connecter pour publier un commentaire.
Vous allouez de la mémoire pour la structure elle-même. Cela inclut le pointeur de char, qui est à seulement 4 octets sur un système 32 bits, parce que c'est une partie de la structure. Il ne comprend PAS la mémoire pour un inconnu de la longueur de la chaîne, donc si vous voulez avoir une chaîne, vous devez allouer de la mémoire pour cela aussi bien. Si vous êtes juste de copier une chaîne de caractères, vous pouvez utiliser
strdup()
qui alloue et des copies de la chaîne. Vous devez libérer de la mémoire, tout de même.Si vous ne voulez pas d'allouer de la mémoire pour la chaîne vous-même, votre seul choix est de déclarer une longueur fixe de tableau dans votre structure. Ensuite, il fera partie de la structure, et
sizeof(mystruct)
comprendra. Si c'est applicable ou non, dépend de votre conception.Je ne pense pas que Devolus apprécie votre point de vue.
surtout depuis qu'il n'est pas très constructif pour critzize sans aucune information ce serait faux.
pour donner H2CO3 crédit, je pense qu'il était en train de parler à hhachem ou était-être aussi sarcastique que moi!
oh! Je pensais qu'il était l'adressage moi, que c'était un commentaire de mon post. 😮
OriginalL'auteur Devolus
Ajouter un deuxième
malloc
pour n'importe quelle longueur (N) dont vous avez besoin pourword
OriginalL'auteur JackCColeman
comme vous pouvez le lire ici vous avez besoin d'allouer de la
char *
séparément :OriginalL'auteur No Idea For Name
Lorsque vous allouer de la mémoire pour
structptr
, le pointeurword
dans lestruct
n'a pas de mémoire valide à point. Donc soit vous l'malloc
un morceau de mémoire pourword
, trop, ou faireword
point à un autre personnage.OriginalL'auteur Yu Hao
malloc l'extérieur struct ne allouer 1 octet de la mémoire pointée par
*word
puisque c'est un 'char *' type. Si vous souhaitez allouer plus de 1 octet de mémoire pointée parword
, il y a 2 options:char word[50]
au lieu de `char *'word
. N'oubliez pas d'appelerfree
deux fois aussi bien dans ce cas.OriginalL'auteur Angela Yan
Utilisation
word=malloc(128);
cela va allouer de 128 octets à votre varible mot,
OriginalL'auteur Abhishek