Le débogueur affiche une valeur incorrecte pour le pointeur

J’ai le code suivant:

#include  #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  #include using namespace std; char str[] = "this.is.a.test"; char str2[] = "this.is.another.test"; typedef struct { size_t count; char** ssortingngs; } Tokens; Tokens Tokenize(char* Ssortingng, char Split) { Tokens t; t.count = 1; for (size_t i = 0; Ssortingng[i] != 0; i++) { if (Ssortingng[i] == Split) t.count++; } t.ssortingngs =(char**) malloc(sizeof(char*)* t.count); if (t.count > 0) t.ssortingngs[0] = Ssortingng; for (size_t i = 0, j = 1; Ssortingng[i] != 0; i++) { if (Ssortingng[i] == Split) { t.ssortingngs[j] = &Ssortingng[i + 1]; Ssortingng[i] = 0; j++; } } return t; } int main(void) { Tokens t = Tokenize(str, '.'); printf("number of ssortingngs: %i\n---\n", t.count); for (size_t i = 0; i < t.count; i++) { printf("%i: %s\n", i, t.strings[i]); } free(t.strings); } 

Le problème est quand je débogue le code et surtout cette ligne t.ssortingngs[j] = &Ssortingng[i + 1];

Dans un cas test de this.is.a.test

Au premier point trouvé. , cela devrait pointer vers cela, mais dans le débogueur cela montre l’image suivante. entrez la description de l'image ici entrez le code ici

    Ce que le débogueur indique est correct à la ligne 55. L’affectation a été effectuée, donc t.ssortingngs[j] pointe après le point.

    Notez que dans Tokenize vous Tokenize des Tokens t; sur la stack et plus tard retourner ce t . C’est mauvais (très mauvais!). Parce que t est sur la stack, il sera écrasé par l’appel à printf .

    (Et bien que la plupart soient C, officiellement C ++, vous ne pouvez pas déclarer une variable dans l’initialisation for , comme dans for (size_t i = 0; )