Le problème est la variable nodeType est en cours de modification après l'exécution de STRCPY. nodeType n'est pas une variable liée à l'une des autres variables utilisées dans l'appel STRCPY. C'est dans la même structure cependant. nodeType est une énumération avec la valeur int de 3.Problème de programmation C variable sans rapport étant écrasée après utilisation de STRCPY
Ci-dessous, si les informations suivantes sont probablement les plus pertinentes. J'ai enlevé la plupart des variables de l'énumération et de la structure afin qu'elles ne soient pas visibles, je suppose qu'elles ne sont pas pertinentes au problème. Je code dans VS2010 si cela fait une différence. Cela fait partie d'une affectation pour créer un arbre binaire, mais la question que j'ai n'a rien à voir avec btrees.
enum NODETYPE
{
ROOTLEAF
};
typedef struct node
{
char key[MAX_CHILDREN_ROOT][MAX_KEY_LENGTH];
NODETYPE nodeType;
} nodeT;
... une partie de la fonction InsertElement
for (int i = 0; i < (b->tempNode->numberOfKeys - b->searchData.position); i++)
{
strcpy(b->tempNode->key[b->tempNode->numberOfKeys - i], b->tempNode->key[b->tempNode->numberOfKeys - (i + 1)]);
}
.. la fonction que j'ai appelé était l'insérer un élément. J'ai appelé la fonction plusieurs fois avant cela, mais c'est la première fois que cette section du code ci-dessous est en cours d'exécution. Après STRCPY s'exécute nodeType prend la valeur 1280070990. Je définis la variable à surveiller et tandis que son erreur dans CXX0017, ce que je suppose signifie seulement son pas dans la portée. J'ai cherché le numéro 1280070990 qui a engendré un tas de problèmes liés à des jeux de divers moteurs. Je suppose que c'est un problème d'adresse mémoire.
La solution était fournie ci-dessous. C'était une simple erreur d'écriture en dehors de la limite du tableau. J'ai cassé l'ancien code comme ça et je l'ai traversé. Cela m'a permis d'identifier le problème que j'étais en train d'écrire en dehors de la clé du tableau clé.
for (int i = 0; i < (b->tempNode->numberOfKeys - b->searchData.position); i++)
{
int sourceI = b->tempNode->numberOfKeys - i - 2;
int destI = b->tempNode->numberOfKeys - i - 1;
char *Source = b->tempNode->key[sourceI];
char *Dest = b->tempNode->key[destI];
strcpy(Dest, Source);
}
Un regard plein au struct que les deux variables étaient.
typedef struct node
{
node *childrenPTR[MAX_CHILDREN_ROOT];
int depth; //Distance from root to node
char key[MAX_CHILDREN_ROOT][MAX_KEY_LENGTH];
NODETYPE nodeType;
int numberOfChildren;
int numberOfKeys;
node *parentPTR;
} nodeT;
Nous pouvons voir dans l'ordre des variables dans la structure qui nodeType suit clé. Je crois que C allouera la mémoire dans le même ordre. Donc je pourrais aussi regarder ici pour identifier le problème.
Il semble que votre chaîne déborde de son tampon. – cdhowie