嗨,我正在制作一种将在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。

09-13 10:50