Realloc un tableau int
Je suis en train de créer un tableau pour stocker un int, alors quand un autre int est ajouté augmentation de la taille de tenir un autre int.. et ainsi de suite..
Je sais que c'est pas une utilisation efficace des realloc, mais c'est la preuve que sur le concept, plus qu'autre chose. Juste pour obtenir ce travail me permettrait d'optimiser et d'être en mesure de l'appliquer à quelque chose d'utile. Un exemple de travail. Le problème vient quand je l'appelle la fonction d'impression et il est juste de segmentation. Toute aide serait appréciée.
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
typedef char String[100];
void begin(int *);
void add(int *, int);
void print(int *);
int tempcount=0;
int main(void)
{
int *n=NULL;
String menu;
begin(n);
while(true)
{
scanf("%9s", menu);
if(!strcmp("a", menu)) //add
{
int i=0;
scanf("%d", &i);
add(n, i);
}
else if(!strcmp("p", menu)) //print
{
print(n);
}
else if(!strcmp("q", menu)) //quit
{
free(n);
break;
}
}
return 0;
}
void begin(int *n)
{
n=malloc(sizeof(int));
if(n==NULL)
{
printf("Error in malloc!");
return;
}
n[0]=0;
printf("Added %d \n", n[0]);
}
void add(int *n, int numToAdd)
{
static int sizeCount=0;
sizeCount++;
tempcount=sizeCount;
int *temp;
temp=realloc(n, (sizeCount+1) * sizeof(int));
if(temp==NULL)
{
printf("Error in realloc!");
return;
}
n=temp;
n[sizeCount]=numToAdd;
printf("Added %d \n", n[sizeCount]);
}
void print(int *n)
{
int i;
for(i=0; i<tempcount; i++)
{
printf("%d ", n[i]);
}
}
Pourquoi pensez-vous
parce qu'il n'?
Ceci est lié et donc d'intérêt: stackoverflow.com/q/13098037/856199
La prochaine fois demandez "Que pensez-vous est la raison..." pour éviter les malentendus.
realloc
retourne un pointeur?parce qu'il n'?
Ceci est lié et donc d'intérêt: stackoverflow.com/q/13098037/856199
realloc
retourne un pointeur car il ne peut pas garantir la "redimensionnée" bloc de mémoire sera dans le même endroit que l'ancien. Si elle a pour déplacer le bloc, il a besoin d'une façon de vous dire où le nouveau bloc est.La prochaine fois demandez "Que pensez-vous est la raison..." pour éviter les malentendus.
OriginalL'auteur Draconian Times | 2012-11-02
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin pour passer un pointeur de votre pointeurs dans ajout/commencer afin qu'ils puissent modifier votre pointeur dans la principale
et votre définition
et
Droit maintenant ce que vous faites, c'est de modifier des copies locales de votre pointeur de début/ajouter, de sorte que lorsque vous modifiez dans ces fonctions, elle n'est pas de modifier votre pointeur de
n
dans les principalesAussi, fait amusant, si vous passez
NULL
comme premier paramètre derealloc
il agit comme unmalloc
, donc si vous initialisezn
àNULL
, vous pouvez simplement appeleradd
sans d'abord faire unbegin
.add
fonction.Hey, merci beaucoup pour votre réponse, cela m'a vraiment aidé et j'ai le programme de travail! Merci!
OriginalL'auteur hexist
Vérifier votre fonction add - êtes-vous sûr de mettre à jour la valeur du pointeur?
Essayez avec ** en tant que paramètre - je pense que ça va aider.
OriginalL'auteur Nik