Comment bien malloc pour le tableau de struct en C
Je vais lire dans les deux char*
(ou de chaînes de caractères) à l'aide de strtok
, et depuis ces deux caractères sont liés, (address : command\n)
j'ai décidé d'utiliser une structure.
struct line* array = (struct line*)malloc(sizeof(file) * sizeof(struct line*));
Cette ligne malloc
ing espace pour la fonction me donne une erreur de segmentation et je me demandais si vous pouvez me dire une bonne façon de malloc
de l'espace. Pour le contexte, voici le reste de mon code:
struct line
{
char* addr;
char* inst;
};
while loop{
x = strtok(line,": ");
y = strtok(NULL,"\n");
strcpy(array[i].addr,x); //assume that x and y are always 3characters
strcpy(array[i].inst,++y);
i++;
}
Gardez à l'esprit que l'allocation de la mémoire pour un tableau de
struct line
ne pas allouer de la mémoire pour le addr
et inst
cordes. Selon la façon dont ces pointeurs à l'intérieur de la struct line
sont utilisés, vous devrez peut-être également allouer de la mémoire pour les données de la chaîne.
OriginalL'auteur o0tomato0o | 2013-10-27
Vous devez vous connecter pour publier un commentaire.
L'allocation de fonctionnement est le même pour tous les types. Si vous avez besoin d'allouer un tableau de
line
structs, vous n'avez qu'à:Dans votre code, vous avez été de l'allocation d'un tableau qui avait la taille appropriée pour
line
pointeurs, pas pourline
des structures. Notez également qu'il n'y a pas de raison de jeter la valeur de retour demalloc()
.Remarque que c'est mieux de style à utiliser:
au lieu de:
La raison pour cela est que l'allocation continuera de fonctionner comme prévu dans le cas où vous modifiez le type de
array
. Dans ce cas, il est peu probable, mais c'est juste une chose générale, la peine de s'y habituer.Également noter qu'il est possible d'éviter d'avoir à répéter le mot
struct
maintes et maintes fois, partypedef
ing la structure:Vous pouvez alors tout simplement:
Bien sûr, n'oubliez pas d'allouer de la mémoire pour
array.addr
etarray.inst
.OriginalL'auteur Nikos C.
Pour ce que vous avez décrit, Vous n'avez pas besoin d'allouer de la mémoire pour votre struct, plutôt, vous avez besoin d'allouer de la mémoire pour les membres
char *addr;
, etchar *inst;
. Si vous voulez avoir un seul exemplaire de cette structure, la première section de code montre comment initialiser, et attribuer des valeurs. Si vous voulez un tableau, le deuxième exemple de code illustre les différences.Cet exemple illustre comment allouer de la mémoire pour les membres d'une unique struct ligne:
Pour le tableau de struct ligne...
strdup()
et utiliser le reste de l'80 caractères pour quelque chose de plus utile. 🙂Ne pouvez pas argumenter plus utile.
OriginalL'auteur ryyker