我认为这是一个非常奇怪的问题。我有一个带有以下原型的函数:
void generateNodes(const int maxX, const int maxY, node nodes[]);
作为这个函数的第一件事,我定义了一个2d的short数组,我用它作为布尔值。但是当我调用此函数时,maxY的值会变为较大的值。有问题的代码如下:
void generateNodes(const int maxX, const int maxY, node nodes[]){
int i, currentX, currentY;
short used[MAX_NODES][MAX_NODES];
//Generate the nodes
for(i = 0; i < MAX_NODES; i++){
currentX = randomNumber(0,maxX);
currentY = randomNumber(0,maxY);
nodes[i].color = 0;
nodes[i].numberOfConnections = 0;
nodes[i].id = i;
nodes[i].distanceFromStart = NOT_SET;
nodes[i].parent = NULL;
if(!used[currentX][currentY]){
nodes[i].x = currentX;
nodes[i].y = currentY;
used[currentX][currentY] = 1;
} else {
i--;
}
}
int numberOfConnections, j, currentNeighbor;
//Generate the connections
for(i = 0; i < MAX_NODES; i++){
numberOfConnections = randomNumber(1,5); //Between one and five outgoing connections
for(j = 0; j < numberOfConnections; j++){
currentNeighbor = randomNumber(0,19); //Select the neighbor
while(currentNeighbor == i){
currentNeighbor = randomNumber(0,19); //Try again while the selected is self
}
nodes[i].canReach[++(nodes[i].numberOfConnections)] = &nodes[currentNeighbor];
nodes[currentNeighbor].canReach[++(nodes[currentNeighbor].numberOfConnections)] = &nodes[i];
}
}
}
MAX_NODES定义为20。
有谁知道为什么会这样?
答案 0 :(得分:2)
很可能...
中的代码访问超出used
的末尾,导致参数被粉碎。没有代码,当然不可能说。
答案 1 :(得分:1)
由于您似乎没有初始化数组used
,因此可能会考虑使用某些元素(!= 0
),因为堆栈上的数组未初始化为零,但需要采取任何操作以前在那个记忆区。
如果使用X,Y对,则将循环计数器递减,可能超过零进入负区域,可能覆盖 - 在下一次迭代 - 堆栈的一部分。这也可能会更改参数,因为它们也位于本地阵列之前的同一堆栈中。
从初始化used
开始,并考虑重写循环以不更改循环变量,除了for
语句。