J'écris une application C++ pour faire une recherche de mots dans une grande base de données de paroles de chansons. pour commencer, je prends chaque mot et de le mettre dans un struct mot qui ressemble à ceci:La valeur stockée disparaît lors de la définition d'un pointeur de structure à null en C++
struct Word{
char* clean;
int size;
int position;
SongId id;
Word* same;
Word* diff;
};
J'ai une fonction « makeNode » qui effectue les opérations suivantes:
- prend chaque mot
- crée une nouvelle struct Word et ajoute le mot à lui
- crée un mot * de nœud appelé qui pointe vers le nouveau mot
- stocke le pointeur dans une table de hachage.
Dans ma fonction makeNode, je règle node-> clean sur mon mot "clean". Je peux imprimer le mot en cout'ing node-> clean. Mais quand je mets node-> same à NULL, je perds node-> clean. Je ne perds pas de nœud-> position ou nœud-> taille. Si je supprime la ligne où j'affecte node-> same à NULL, je ne perds pas node-> clean.
char* clean = cleanse(word);
Word* node = new Word;
node->size = strlen(word);
node->clean = clean;
cout<<"MADE NODE FOR "<<node->clean<<endl;
node->position = position;
cout<<"4 node clean: "<<node->clean<<endl;
node->id = id;
cout<<"5 node clean: "<<node->clean<<endl;
node->same = NULL;
cout<<"6 node clean: "<<node->clean<<endl;
cout<<"node position: "<<node->position<<endl;
cout<<"node size: "<<node->size<<endl;
node->diff = NULL;
donne le résultat suivant:
MADE NODE FOR again
4 node clean: again
5 node clean: again
6 node clean:
node position: 1739
node size: 6
0 node clean:
1 node clean:
3 node clean:
Quelqu'un peut-il me aider à franchir cette erreur? Si vous avez besoin de plus d'info laissez-moi savoir. Merci d'avance!
EDIT: voici la fonction de nettoyage.
char* SongSearch::cleanse(char* dirty)
{
string clean;
int iter = 0;
while (!isalnum(dirty[iter]))
{
iter++;
}
while(dirty[iter]!='\0')
{
clean += dirty[iter];
iter++;
}
int backiter = clean.length() - 1;
while(!isalnum(clean[backiter]))
{
clean.erase(backiter, 1);
backiter--;
}
char c;
for (int i = 0; i<clean.length(); i++)
{
c = tolower(clean[i]);
clean[i] = c;
}
char* toReturn = (char*)(clean.c_str());
return toReturn;
}
Qu'est-ce que 'cleanse'? Une fonction? Postez son code. Renvoie-t-il le tableau char local? – Nawaz
Si ça fait mal quand vous faites quelque chose, ne le faites pas. Arrêtez d'utiliser char *, Word * et utilisez les chaînes std :: et un vecteur de Word. Et repensez le nom de votre structure - pourquoi est-ce appelé Word? –