2017-07-09 1 views
0

J'ai créé le pointeur et lui ai alloué de la mémoire. Cette mémoire doit contenir le nombre, que je passe à l'intérieur dans le style de tableau (1 nombre = 1 élément), aussi, l'élément 0 est la taille du nombre. Cependant, je suis confronté au problème de la modification des données dans la mémoire allouée, en utilisant un pointeur. Si j'utilise mon code dans la fonction principale, tout se passe parfaitement, mais quand je crée une autre fonction et que je lui passe une valeur de pointeur, je ne peux pas la sauvegarder (si le nombre est plus grand que 99999 et prend 6 éléments stocké).Utilisation du pointeur de mémoire allouée à l'intérieur de la fonction

La fonction principale:

int *convNum=NULL; 

int main() { 
int num; 
convNum = malloc(sizeof(int)); 
if (convNum==NULL){ 
    printf("Allocation error\n"); 
    exit(0); 
} 

scanf("%d", &num); 
convNum[0] = numLength(num); 
printf("%d\n", convNum[0]); 
convertNum(num, convNum); 

for (int i = 1; i<=convNum[0]; i++){ 
    printf("%d", convNum[i]); 
} 

printf("\n"); 

return 0; 
} 

La fonction, que je suis en train d'utiliser

int convertNum(int num, int * convNum){ 
int temp = num; 
int size = convNum[0]; 
convNum = realloc(convNum, sizeof(int)*(size+1)); 
if (convNum==NULL){ 
    printf("Allocation error\n"); 
    exit(0); 
} 
for (int i=size;i>0;i--){ 
    convNum[i] = temp % 10; 
    temp = temp/10; 
} 
return 0; 
} 

ÉDITÉE La sortie avec la taille du nombre moins, que 6 me donne le résultat J'ai eu besoin. La sortie avec d'autres nombres me donne la taille cassée (quelque chose comme -10349945820) et aucun résultat approprié.

+1

Copie possible de [C - pointeurs en tant qu'arguments de la fonction] (https://stackoverflow.com/questions/18698317/c-pointers-as-function-arguments) –

+0

Possible duplication de [C Programming: malloc() dans un autre function] (https://stackoverflow.com/questions/2838038/c-programming-malloc-inside-another-function) – melpomene

Répondre

0

Votre réaffectation ne survit pas à l'appel de votre fonction au convertNum. Voir ce sujet dans le C-Foire Aux Questions:

Pointer to pointer clarification

Vous devez passer le pointeur convNum par référence.

+0

Merci, j'ai changé pour "int convertit num (int num, int ** convNumber)" et "convertNum (num, & convNum) ". Puis j'ai essayé "convNumber [i] = temp% 10;" à l'intérieur de la fonction, comme je l'ai trouvé au pointeur de l'information sur le pointeur. Cependant, il enregistre tout à "convNumber", pas à "convNum". Et si j'essaye "* convNumber [i] = temp% 10;" cela conduit à un défaut de segmentation. Veuillez nous conseiller Je vous remercie. –

+0

@MatthewDarens OK, attendez. N'essayez pas de poster une autre question dans un commentaire. Prenez le temps d'assimiler les nouvelles informations. Peut-être en lire plus sur les pointeurs. Ensuite, postez une autre question. Nous allons essayer de vous aider. Nous n'écrirons pas votre code pour vous. –

+0

Merci, j'essaie de le réparer maintenant. –