2 votes

Comment initialiser un char** à partir d'une autre fonction ?

J'obtiens un défaut de segmentation sur le code suivant :

#include <stdio.h>
#include <stdlib.h>
#include <string.h> 

void init_test(char ***test) {
    *test = malloc(2 * sizeof(char *));
    *test[0] = malloc(3); 
    *test[1] = malloc(3); 
    strcpy(*test[0], "12"); 
    strcpy(*test[1], "13"); 
}

int main()
{
    char **test = NULL;
    init_test(&test); 
    printf("1: %s, 2: %s", test[0], test[1]); 
    printf("Hello World");
    return 0;
}

J'ai quelques variantes de ce système, mais je ne sais pas comment initialiser correctement un char** dans une autre fonction.

3voto

Joachim Pileborg Points 121221

C'est une question de la préséance des opérateurs . L'expression *test[0] est égal à *(test[0]) pas (*test)[0] comme vous semblez l'attendre.

1voto

dbush Points 8590

L'opérateur d'indexation de tableau a une priorité plus élevée que l'opérateur de déréférencement. Vous devez ajouter des parenthèses :

(*test)[0] = malloc(3); 
(*test)[1] = malloc(3); 
strcpy((*test)[0], "12"); 
strcpy((*test)[1], "13");

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X