Différence entre malloc et realloc?
Supposons que j'ai deux exemples de code pour la création d'un tableau d'entiers de 10 éléments:
int *pi = (int*) 0xDEADBEEF;
realloc(pi,10);
et l'autre est celui qui est écrit normalement, c'est à dire:
int *pi;
pi= malloc(10*sizeof(int));
Maintenant, ma question est la suivante: Le premier type de cession est légal, mais pas utilisé. Pourquoi, bien que je puisse obtenir le point de départ de mon choix?
Iniitialization de pointeurs avec des constantes sont légales, mais pas utilisé. Pourquoi?
source d'informationauteur deeiip | 2012-11-12
Vous devez vous connecter pour publier un commentaire.
Ahhhh, non! Que le premier appel n'est pas légal. Vous ne pouvez pas passer
realloc
hasard pointeur et espérer pour le mieux. Le premier paramètre à realloc doit être un pointeur vers la mémoire de votre programme a été précédemment attribué (par le biais de quelque chose commemalloc
calloc
ou amis) ou un pointeur null.Quand
NULL
est passé, c'est l'équivalent demalloc
. La valeur NULL peut être utile si vous êtes à la ré affectation dans une sorte de boucle et de ne pas vouloir d'un cas spécial, la première fois que vous allouer.Pendant que nous y sommes, la assez standard façons d'utiliser malloc et realloc sont:
Comme un tangentielle de côté: l'histoire est la principale raison pour laquelle vous voyez les déclarations et les affectations sur des lignes différentes. Dans les anciennes versions de C, déclarations, il fallait d'abord dans les fonctions. Cela signifie que même si votre fonction ne pas utiliser une variable jusqu'à 20 lignes, vous avez eu à déclarer dans la partie supérieure.
Depuis généralement, vous ne savez pas ce que la valeur d'une variable non utilisée pour un autre 20 lignes, vous ne pouvez pas toujours l'initialiser à rien de constructif, et donc vous êtes de gauche avec une déclaration et de non-cession dans le haut de votre fonction.
En C99/C11, vous n'avez pas à déclarer les variables dans le haut de la lunette de visée. En fait, il est généralement suggéré de définir des variables en tant que proche de leur utilisation possible.
C exige que le pointeur passé à
realloc
doit être un pointeur obtenu à partir demalloc
calloc
ourealloc
appel de fonction (ou un pointeur nul).La première affectation est pas juridique, parce que le pointeur de vous passer dans
realloc()
doit avoir été précédemment donnée à vous par le biais d'une allocation d'une certaine sorte. (En outre, vous êtes ignorant de sa valeur de retour, quelque chose que vous ne devez jamais faire avec les allocations!)malloc()
est de créer une zone tampon pour quelque chose, de quelque taille fixe.realloc()
est de redonner un tampon et d'en faire un autre de certains (sans doute) de taille différente-et il pourrait vous redonner le même tampon que vous utilisez.