J'écris des opérations de pile simples avec ma structure de données étant un tableau.Utilisation de realloc() sur une pile
#define DEFAULT_VAL 10 //in a separate Header file
int *stacky = (int*) malloc (default_size * sizeof(int));
L'objectif est d'écrire une fonction pour définir dynamiquement la taille de la pile tout en veillant à ce que les éléments ne sont pas perdus.
Voici ce que j'ai jusqu'à présent:
void Sizer(int size)
{
#undef DEFAULT_VAL
#define DEFAULT_VAL size
maxSize = size;
int *newbuffer = (int*) realloc (stacky, size);
if(newbuffer == NULL) //checking if the 'realloc' was successful :)
{
printf("PROBLEM HERE :)");
}
else
{
stacky = newbuffer;
}
}
Dans ma fonction main()
:
int main()
{
int i;
for(i=1; i<15; i++)
{
push(i);
}
Sizer(9);
displayStack();
Sizer(17);
displayStack();
}
La sortie est:
DEFAULT_VAL is now: 9
9. 9
8. 8
7. 7869816
6. 7877384
5. 17278
4. 385207786
3. 3
2. 2
1. 1
DEFAULT_VAL is now: 17
9. 9
8. 8
7. 7869816
6. 7877384
5. 17278
4. 50331651
3. 3
2. 2
1. 1
Tout conseil est apprécié! Merci
Vous ne pouvez pas utiliser '# define' de la façon dont vous essayez de les utiliser (en tant que variables). – tkausl
La définition de 'stacky' n'est pas claire à 100%, mais en C, vous ne pouvez pas écrire un initialiseur comme celui affiché lorsque la variable est en dehors d'une fonction. –
Notez que dans le code 'vide Sizer (int size) {/ * * newline/ #undef DEFAULT_VAL/* * newline/ #define DEFAULT_VAL taille/* * newline/ maxSize = taille;', vous ne utilise en fait 'DEFAULT_VAL'. La définition de 'size' est étrange. N'oubliez pas que le préprocesseur effectue une substitution de texte lors de la compilation. Le code pourrait fonctionner - mais utiliser le préprocesseur pour faire ce que vous essayez de faire est pervers, d'autant plus que la macro n'est pas réellement utilisée. –