Realloc un tableau de Structures

Je suis en train de réallouer dynamiquement de la mémoire pour un tableau de struct (en fait une matrice de chacune des 2 structures, mais 1 inclus ici pour plus de simplicité) qui est lu à partir de/vers un fichier ou saisie par l'utilisateur.

typedef Struct
{
    char surname[21];
    char firstname[21];
    char username[21];
...
} User;

...dans main():

int size = 0; /* stores no. of structs */
User* user_array = (User *) calloc(1, sizeof(User));
if(user_array == NULL)
{
    printf("Cannot allocate initial memory for data\n");
    exit(1);
}
else
    size++;

Je suis d'essayer d'utiliser un appel de fonction pour augmenter le tableau en cas de besoin:

int growArray(User user_array*, int size)
{
    User *temp;
    size++;
    temp = (User *) realloc(user_array, (size * sizeof(User));
    if(temp == NULL)
    {
        printf("Cannot allocate more memory.\n");
        exit(1);
    }
    else
        user_array = temp;
    return size;
}

Malheureusement, le realloc ne fonctionne jamais. Les deux structures sont que d'environ 200 octets par exemple et le réglage de la taille initiale-à-dire 10 fonctionnera très bien, donc il doit y avoir quelque chose de mal avec la façon dont je suis en train d'utiliser realloc.

Système Win 7 64, sur Core i5 avec 4 go, l'exécution de Quincy (un MinGW GUI).

  • int growArray(User user_array, int size)? Vous manque un *?
  • post le vrai code ne compile pas
  • Je pense qu'il manque deux d'entre eux.
  • Si vous obtenez cela fonctionne, vous pouvez simplifier le code en faisons aussi de la répartition initiale avec growArray. Aussi, soyez conscient que votre calloc() permet d'initialiser la première entrée, tandis que la postérieure realloc() va quitter la zone d'extension non initialisée. Comme cnicutar notes, la "taille++" ne sera pas visible à l'appelant.
  • dantje - pour le moment je suis en utilisant la taille de ma valeur de retour - désolé pour le laisser sortir
  • cette chose que vous appelez la taille doit être appelée longueur
  • ce serait plus précis que je suis de ne pas stocker. d'éléments dans le tableau. Dans mon programme (trop long d'énumérer ici), il est no_elements