J'essaye d'écrire un petit programme qui utilise realloc(), getchar() et une certaine arithmétique de pointeur pour stocker un tableau de caractères dans la mémoire.Tentative d'utilisation de realloc(), obtention du core
J'ai une fonction appelée "inputArray" (dans convert.c) qui reçoit un pointeur vers un char (qui est d'abord NULL, déclaré dans main.c), puis est réattribué avec un caractère jusqu'à getchar() obtient un caractère '\ n' les fonctions semblent fonctionner correctement, mais lorsque j'essaie d'imprimer la chaîne dans main.c, j'obtiens une erreur "segmentation fault (core dumped)". J'ai cherché pendant des heures, ne peux pas trouver où le problème est. Merci!
main.c:
# include "convert.h"
int main()
{
char * string = NULL;
inputArray(string);
printf("%s", string);
free(string);
return 0;
}
convert.c:
#include "convert.h"
void inputArray(char * array)
{
/*pointer to the array*/
char * ptr = NULL;
/*stores the char*/
char c = 0;
/*counter used for pointer arithmetic*/
int count = 0;
/*loop for getting chars in array*/
while ((c = getchar()) != '\n')
{
array = realloc(array, sizeof(char));
ptr = array + count;
*ptr = c;
++count;
}
/*add the null char to the end of the string*/
array = realloc(array, sizeof(char));
ptr += count;
*ptr = '\0';
}
CONVERT.H:
#include <stdio.h>
#include <stdlib.h>
void inputArray(char * array);
Recherchez et lisez à propos de * émulant le passage par référence dans c *. –
'sizeof (char)' sera toujours 1 ..... (bien, peut-être 2 si vous utilisez des caractères double largeur - mais c'est une taille fixe, ce qui n'est pas ce que vous voulez). – gilez