J'ai des difficultés à implémenter Realloc de manière très basique.Realloc n'élargissant pas mon tableau
J'essaie d'élargir la région de mémoire à ** ret, qui pointe vers un tableau de struct avec ret = realloc(ret, newsize);
et basé sur mes chaînes de débogage je sais NewSize augmente correctement au cours de la boucle (passant de la taille d'origine de 4 à 8 à 12 etc.), mais quand je le fais sizeof(ptr)
il retourne toujours la taille d'origine de 4, et les choses que j'essaie de placer dans l'espace nouvellement alloué ne peuvent pas être trouvées (Je pense que je l'ai réduit à realloc() qui est la raison pour laquelle je suis en train de formater la question comme ça)
Je peux poster la fonction dans son intégralité si le problème n'est pas immédiatement évident pour vous, je suis juste essayer de ne pas "tricher" avec trop de devoirs (le code est en quelque sorte désordonné en ce moment, avec une utilisation intensive de printf() pour le débogage). D'accord, donc en fonction de vos réponses, je n'arrive pas à déboguer mon code, donc je suppose que je vais poster toute la fonction afin que vous puissiez m'en dire plus sur ce que je fais de mal.
(Vous pouvez ignorer le printf() 's puisque la plupart de qui est mise au point qui est même pas travailler)
Booking **bookingSelectPaid(Booking **booking) {
Booking **ret = malloc(sizeof(Booking*));
printf("Initial address of ret = %p\n", ret);
size_t i = 0;
int numOfPaid = 0;
while (booking[i] != NULL)
{
if (booking[i]->paid == 1)
{
printf("Paying customer! sizeof(Booking*) = %d\n", (int)sizeof(Booking*));
++numOfPaid;
size_t newsize = sizeof(Booking*) * (numOfPaid + 1);
printf("Newsize = %d\n", (int)newsize);
Booking **temp = realloc(NULL, (size_t)newsize);
if (temp != NULL)
printf("Expansion success! => %p sizeof(new pointer) = %d ret = %p\n", temp, (int)sizeof(temp), ret);
ret = realloc(ret, newsize);
ret[i] = booking[i];
ret[i+1] = NULL;
}
++i;
printf("Sizeof(ret) = %d numOfPaid = %d\n", (int)sizeof(ret), numOfPaid);
}
return ret; }
[EDIT2] ->http://pastebin.com/xjzUBmPg
[EDIT3] Juste pour soyez clair, le printf, le pointeur de temp et les choses de cette nature sont debug, et ne font pas partie de la fonctionnalité prévue. La ligne qui laisse perplexe moi est soit celui avec realloc(ret, newsize);
ou ret[i] = booking[i]
Fondamentalement, je sais pour sûr que la réservation contient une table de struct, qui se termine par NULL, et je suis en train d'amener ceux qui ont un ensemble de valeur spécifique à 1 (payé) sur la nouvelle table, ce qui est ce que ma main() essaie d'obtenir de cette fonction ... Alors, où vais-je me tromper?
Quelle est exactement la question ici? (Je ne vois pas de point d'interrogation n'importe où ...) –
Je suppose que la question est: "Qu'est-ce que je fais de mal?" Fondamentalement, j'ai alloué '** ptr = malloc (sizeof (ma_structure *))' sans savoir combien d'instances de la structure seront dans mon tableau, puis basé sur une boucle, j'augmente une taille variable et en utilisant cela dans 'ptr = realloc (ptr, newsize)' mais je ne suis pas en mesure de placer plus de structs dans le tableau ... Je peux poster tout le code même au risque d'échouer mon cours si je Je suis trop ambigu, haha. – user1478361
@ user1478361: La prochaine fois, utilisez 'code sample' pour le code au lieu de 'blockquote' (c'est dans la barre d'outils d'édition). Je l'ai réparé pour vous pour le moment. – Tim