C: l'Expansion d'un tableau avec malloc
Je suis un peu nouveau pour malloc et C en général. Je voulais savoir comment je peux, si nécessaire, d'étendre la taille d'un tableau de taille fixe avec malloc.
Exemple:
#define SIZE 1000
struct mystruct
{
int a;
int b;
char c;
};
mystruct myarray[ SIZE ];
int myarrayMaxSize = SIZE;
....
if ( i > myarrayMaxSize )
{
//malloc another SIZE (1000) elements
myarrayMaxSize += SIZE;
}
- L'exemple ci-dessus devrait indiquer clairement ce que je veux accomplir.
(En passant: j'en ai besoin pour un interprète, j'écris: Travailler avec un montant fixe de variables et dans des cas plus sont nécessaire, il suffit de les allouer de façon dynamique)
OriginalL'auteur Mal Ock | 2010-04-30
Vous devez vous connecter pour publier un commentaire.
Utilisation realloc, mais vous devez allouer le tableau avec la fonction malloc de la première. Vous êtes de l'allocation sur la pile dans l'exemple ci-dessus.
x = realloc(x, newsize)
est une fuite de mémoire en attente de se produire.Bon point. J'ai mis à jour l'exemple de code pour gérer le realloc échecs.
myarray = myrealloced_array)
devrait êtremyarray = myrealloced_array;
🙂Vous n'avez pas nécessairement à allouer à
malloc()
premier "si ptr est un pointeur null, la fonction realloc se comporte comme la fonction malloc de la taille spécifiée"La programmation est dur. 🙂
OriginalL'auteur i_am_jorf
Vous souhaitez utiliser realloc (comme d'autres affiches ont déjà souligné). Mais malheureusement, les autres affiches n'ont pas démontré comment l'utiliser correctement:
Vous devez utiliser
tmp_ptr
de sorte que sirealloc
échoue, vous ne perdez pas l'original pointeur.OriginalL'auteur R Samuel Klatchko
Non, vous ne pouvez pas. Vous ne pouvez pas modifier la taille d'un tableau sur la pile une fois qu'il est défini: c'est le genre de ce que fixe la taille moyens. Ou d'un réseau mondial, que ce soit: il n'est pas clair à partir de votre exemple de code où
myarray
est défini.Vous pourriez
malloc
1000 élément de tableau, et, plus tard, le redimensionner avecrealloc
. Cela peut vous renvoyer un nouveau tableau contenant une copie des données à partir de l'ancien, mais avec de l'espace supplémentaire à la fin.OriginalL'auteur Steve Jessop
a) vous n'avez pas utiliser malloc pour le créer si vous ne pouvez pas développer avec malloc. Faire:
b) utiliser realloc (RTM) pour le rendre plus grand
OriginalL'auteur pm100