gpt4 book ai didi

c - 为什么除 main 之外的函数中的数组初始化是临时的?

转载 作者:行者123 更新时间:2023-11-30 17:50:17 25 4
gpt4 key购买 nike

这是我在main以及函数“checkCollisionOrFood()”中初始化数组“turn[20]”的代码,四个值turn[0],turn[1],turn[2],turn [3]在主函数中初始化为零,其余部分在“checkCollisionOrFood()”中初始化。这是故障开始的地方。当我在“checkCollisionOrFood()”中初始化turn[4]=0,然后在任何地方访问它时,它在任何函数中都保持 0,但是!当我初始化下一个turn[]时,即turn[5],turn[4]的值被耗尽。即turn[4]有垃圾值。turn[20]是全局变量,它的索引“head”也是全局的。I我被这个问题困扰了,请帮助我摆脱它。这是我的完整代码

#include <mega8.h>
#include <delay.h>
#include <stdlib.h>

unsigned short address[]= {0b00001111,0b00000000,0b00000000,0b00000000,
0b00000000,0b00000000,0b00000000,0b00000000};
unsigned short turn[20];//it is declared as global variable.
unsigned short head=3;
unsigned short colHead=0;
unsigned short rowHead =3;
unsigned short rowTail=0;
unsigned short colTail=0;
unsigned short size=4;
unsigned short foodx;
unsigned short foody;

...

unsigned short checkCollisionOrFood()
{
head=(head+1)%20;
if(turn[head-1]==0){
turn[head]=0;

/这是turn[]被初始化的地方,如果我在这里访问turn[head],即在初始化之后,它会给出正确的值,但如果我访问它之前的值意味着turn[head-1],那么它给出垃圾值/

    PORTB=255;PORTB&=~(1<<turn[4]);PORTD.7=0;delay_ms(200);PORTD.7=1;

/通过这个语句,我在turn[4]初始化之后检查了turn[4]的值,给出了正确的答案,然后在turn[5]初始化并访问turn[4]之后给出了垃圾。/

    rowHead=(rowHead+1)%8;
if(!(address[colHead]&(1<<rowHead)))return 1;
else if((address[colHead]&(1<<rowHead))&&
(!((colHead==foody)&&(rowHead==foodx))))gameOver();
else return 0;
}
if(turn[head-1]==1){
turn[head]=1;
colHead=(colHead+1)%8;
if(!(address[colHead]&(1<<rowHead)))return 1;
else if((address[colHead]&(1<<rowHead))&&
(!((colHead==foody)&&(rowHead==foodx))))gameOver();
else return 0;
}
}
void main(void)
{
turn[0]=0;turn[1]=0;turn[2]=0;turn[3]=0;

/无论在何处访问,turn[] 的这些值都不会更改。/

while (1)
{
if(checkCollisionOrFood())
{
PORTB=(address[colHead] |=1<<rowHead);
turnOffTail();
blink();
}
else
{
PORTB=address[colHead];
createFood();
blink();
}
}

}

请建议我摆脱它。

最佳答案

如果您在 head 中观察到垃圾,这很可能是由于访问 address 越界所致,因为它位于 turn 之前的内存中

检查address的索引,以确保您没有写入超出其边界的内容,并用此覆盖下一个变量中的数据,即turn

关于c - 为什么除 main 之外的函数中的数组初始化是临时的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17357958/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com