Je sais comment créer un tableau de structures, mais avec une taille prédéfinie. Cependant est-il possible de créer un tableau dynamique de structures telles que le tableau pourrait obtenir de plus gros?
Par exemple:
typedef struct
{
char *str;
} words;
main()
{
words x[100]; // I do not want to use this, I want to dynamic increase the size of the array as data comes in.
}
Est-ce possible?
J'ai fait des recherches: words* array = (words*)malloc(sizeof(words) * 100);
Je ne pense pas que je l'explique moi clairement, mes excuses.
Je veux me débarrasser de l'100 et stocker les données à mesure qu'il arrive. Ainsi, si 76 champs de données, je veux stocker 76 et 100. Je pars du principe que je ne sais pas quelle quantité de données est arrivée dans mon programme. Dans la structure que j'ai défini plus haut, j'ai pu créer le premier "index" comme:
words* array = (words*)malloc(sizeof(words));
Mais je tiens à ajouter dynamiquement des éléments de la matrice après. J'espère que j'ai décrit la zone à problème assez clairement. Le défi majeur est d'ajouter dynamiquement un deuxième champ, au moins, c'est le défi à relever pour le moment.
J'ai fait un peu de progrès cependant:
typedef struct {
char *str;
} words;
// Allocate first string.
words x = (words) malloc(sizeof(words));
x[0].str = "john";
// Allocate second string.
x=(words*) realloc(x, sizeof(words));
x[1].FirstName = "bob";
// printf second string.
printf("%s", x[1].str); --> This is working, it's printing out bob.
free(x); // Free up memory.
printf("%s", x[1].str); --> Not working since its still printing out BOB even though I freed up memory. What is wrong?
J'ai fait un peu de vérification des erreurs et c'est ce que j'ai trouvé. Si après je libérer de la mémoire pour x je ajouter ce qui suit:
x=NULL;
alors si j'essaie d'imprimer x, j'obtiens une erreur qui est ce que je veux. Donc, est-ce que le libre ne fonctionne pas, au moins sur mon compilateur? J'utilise DevC??
Merci, je comprends maintenant, en raison de:
Le prénom est un pointeur vers un tableau de char qui n'est pas allouée par la fonction malloc, seul le pointeur est alloué et après vous appel gratuitement, il n'efface pas le souvenir, c'est juste la marque comme disponible sur le tas à être écrites plus tard. – MattSmith
P. S. Désolé pour la longue page, je suppose que je suis maintenant habitué à ce forum.
Je suis dans un problème. Je n'ai aucune idée de quoi faire à côté. S'il vous plaît aider quelqu'un. Je suis en train de modulariser et de mettre de la création de mon tableau de structures dans une fonction, mais ça ne fonctionne pas et j'ai tout essayé, rien du tout semble fonctionner. Je suis en train d'essayer quelque chose de très simple et je ne sais pas quoi faire d'autre. C'est dans le même sens qu'avant, juste une autre fonction, loaddata c'est le chargement des données et à l'extérieur de la méthode que j'ai besoin de faire quelque impression. Comment puis-je le faire fonctionner?. Mon code est comme suit:
# include <stdio.h>
# include <stdlib.h>
# include <string.h>
# include <ctype.h>
typedef struct
{
char *str1;
char *str2;
} words;
void LoadData(words *, int *);
main()
{
words *x;
int num;
LoadData(&x, &num);
printf("%s %s", x[0].str1, x[0].str2);
printf("%s %s", x[1].str1, x[1].str2);
getch();
}//
void LoadData(words *x, int * num)
{
x = (words*) malloc(sizeof(words));
x[0].str1 = "johnnie\0";
x[0].str2 = "krapson\0";
x = (words*) realloc(x, sizeof(words)*2);
x[1].str1 = "bob\0";
x[1].str2 = "marley\0";
*num=*num+1;
}//
Ce simple code de test est de s'écraser et je n'ai aucune idée pourquoi. Où est le bug?