c 变量递增时变为 -17918

标签 c arrays variables gameboy

嗨,我正在制作一种可以在任天堂 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/

相关文章:

linux - bash:如何在 for 循环中访问 "dynamic declared variable"

C程序不允许超过n个线程同时执行函数f

clang:不能将 'precompiled-header' 输出与多个 -arch 选项一起使用

使用gdb调试器出现c代码段错误 "SIGSEGV"

c++ - "EXC_BAD_ACCESS"使用数组时 C++

php - 如何使数组第一个值作为第二个值的键作为php数组中的值

c - 使用 fgets() 和跳行从另一个 CSV 写入 CSV

javascript数组推送问题

java - 对变量的更改不会保留在循环之外并且变量不会继承到其他类

java - 在Java中访问方法的变量