嗨,我正在制作一种可以在任天堂 Gameboy 上运行的 C 语言编程语言 这就是为什么你会看到一些函数,如 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
的值仅当 CHAR_BIT
时才可以大于 2047大于 11。
添加#include <limits.h>
添加到您的程序并确保CHAR_BIT
不大于11。
关于c 变量递增时变为 -17918,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25326402/