Je semble obtenir un vidage de pile dans ma fonction où j'alloue de la mémoire.pile dump en utilisant allocation
Je passe un tableau de 'sortie' de pointeurs à ma fonction. Et puis j'attribue assez de mémoire pour assigner dans cette mémoire une chaîne. Cependant, je reçois une décharge de pile.
Un grand merci pour toutes les suggestions,
void display_names(char **names_to_display, char **output);
int main(void)
{
char *names[] = {"Luke", "John", "Peter", 0};
char **my_names = names;
char **new_output = 0;
while(*my_names)
{
printf("Name: %s\n", *my_names++);
}
my_names = names; /* Reset */
display_names(my_names, new_output);
// Display new output
while(*new_output)
{
printf("Full names: %s\n", *new_output++);
}
getchar();
return 0;
}
void display_names(char **names_to_display, char **output)
{
while(*names_to_display)
{
// Stack dump here
*output = (char*) malloc(sizeof("FullName: ") + strlen(*names_to_display)); // Allocate memory
// Copy new output
sprintf(*output, "FullName: %s", *names_to_display++);
printf("display_names(): Name: %s\n", *output++);
}
}
======================== Mis à jour ======== ================
void display_names(char **names_to_display, char **output);
int main(void)
{
char *names[] = {"Luke", "John", "Peter", 0};
char **my_names = names;
char *new_output[] = {0};
size_t i = 0;
while(*my_names)
{
printf("Name: %s\n", *my_names++);
}
my_names = names; /* Reset */
display_names(my_names, new_output);
// Stack dump here.
while(*new_output[i])
{
printf("Full names: %s\n", *new_output[i]);
i++;
}
getchar();
return 0;
}
void display_names(char **names_to_display, char **output)
{
while(*names_to_display)
{
*output = malloc(strlen("FullName: ") + strlen(*names_to_display) + 1); // Allocate memory
// Copy new output
sprintf(*output, "FullName: %s", *names_to_display++);
printf("display_names(): Name: %s\n", *output++);
}
}
En C, ne jamais afficher la valeur de retour de malloc(). Ce n'est pas nécessaire (malloc() renvoie void *, qui convertit correctement en un autre type de pointeur, par définition), et peut cacher des erreurs si vous avez oublié un fichier d'en-tête. – unwind