問題是在STRCPY運行完成後,變量nodeType正在改變。 nodeType不是與STRCPY調用中使用的任何其他變量相關的變量。它在同一個結構中。 nodeType是一個int值爲3的枚舉。使用STRCPY後C編程問題無關的變量被覆蓋
下面是如果下面的信息可能是最相關的。我從枚舉和結構中刪除了大部分變量,因此它們不可見,我認爲它們與問題無關。我在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;
我們可以從該節點類型如下關鍵的結構體變量的順序看。我相信C會以相同的順序分配內存。所以我也可以看看這裏以確定問題。
聽起來像你的字符串溢出其緩衝區。 – cdhowie 2010-11-23 18:46:30