嗨,我正在制作一种将在C中的任天堂Gameboy上运行的编程语言
这就是为什么您会看到一些函数,例如waitpad();的原因。
但是这个问题与Gameboy库无关
由于某些原因,当我尝试在main.c文件中增加某个变量时:
#include <stdio.h>
#include <gb/gb.h>
#include "convert.h"
#include "display.h"
#include "input.h"
#include "functions.h"
#include "interpreter.h"
unsigned char cnt[5] = {1,2,3,4,5};//cnt is short for counters
unsigned char k = 0;
unsigned char running = 1;
unsigned char memory[2048];
unsigned char code[2048];
int main()
{
Clear_mem();
Clear_code();
while(running == 1) {
display(cnt[0],cnt[1],cnt[2],cnt[3],cnt[4]);
printf("cnt[0] = %d\n", cnt[0]);
cnt[0]++;//turns into -17918
printf("Press Start To Enter Next Character\n");
waitpad(J_START);
code[k] = input();
interpret(code[k]);
k++;
}
return 0;
}
cnt [0]变成-17918
谁能看到任何会导致这种行为的问题?
最佳答案
您问是否有人看到问题,嗯-是的,这是一个问题:
unsigned char k = 0;
unsigned char running = 1;
unsigned char code[2048];
while(running == 1) {
code[k] = input();
k++;
}
如果
k >= 2048
,则code[k] = ...
将导致内存覆盖。重写内存后,几乎所有事情都可能发生(未定义的行为)。
话虽如此,仅当
k
大于11时,CHAR_BIT
的值才能大于2047。将
#include <limits.h>
添加到您的程序,并确保CHAR_BIT
不大于11。