Проблема в том, что переменная nodeType изменяется после завершения работы STRCPY. nodeType не является переменной, которая связана с любой другой переменной, используемой в вызове STRCPY. Это в той же структуре, хотя. nodeType - это перечисление со значением int, равным 3.
Ниже приведена следующая информация, которая, вероятно, наиболее актуальна. Я удалил большинство переменных из перечисления и структуры, чтобы они не были видны, я предполагаю, что они не имеют отношения к проблеме. Я кодирую в VS2010, если это имеет значение. Это часть задания по созданию btree, но у меня вопрос не имеет ничего общего с btrees.
enum NODETYPE
{
ROOTLEAF
};
typedef struct node
{
char key[MAX_CHILDREN_ROOT][MAX_KEY_LENGTH];
NODETYPE nodeType;
} nodeT;
... часть функции 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)]);
}
.. функция, которую я вызвал, была для вставки элемента. До этого я вызывал эту функцию несколько раз, но это первый из приведенных ниже разделов кода. После того, как STRCPY запустится, nodeType принимает значение 1280070990. Я установил переменную для наблюдения, и пока она в CXX0017, ошибка, которая, как я предполагаю, только означает, что она не находится в области действия.
Я посмотрел номер 1280070990, который породил кучу проблем, связанных с игрой, из разных движков. Я предполагаю, что это проблема адреса памяти.
Решение было предоставлено ниже. Это была простая ошибка записи вне границы массива. Я сломал старый код, как это, а затем прошел через него. Это позволило мне определить проблему, которую я писал вне ключа массива ключей.
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);
}
Полный обзор структуры, в которой находились обе переменные.
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;
Мы можем видеть из порядка переменных в структуре, что nodeType следует за key. Я считаю, что C будет выделять память в этом же порядке. Так что я мог бы посмотреть здесь, чтобы определить проблему.