分段故障(核心转储)

use*_*818 1 c

当我尝试运行它时,我收到了分段错误(核心转储).它完美编译,但我得到错误,我不知道为什么.我试图以所有可能的方式编辑我的代码,但我仍然收到此错误.我已经没有想法了.任何帮助都会很棒.谢谢!

    unsigned short *reg = NULL;

    int byte;
    int i;
    for (byte = 0; byte < num_bytes; byte++){
        unsigned int next_byte = (unsigned int) message[byte];
        crc_byte(reg, key, next_byte);
    }

    for (i = 0; i < 16; i++){
        crc_bit(reg, key, 0);
    }

    return *reg;
}
Run Code Online (Sandbox Code Playgroud)

oog*_*oga 5

编译调试信息:

> gcc -o myprog myprog.c -ggdb
Run Code Online (Sandbox Code Playgroud)

在调试器中运行

> gdb myprog
(gdb) run
Run Code Online (Sandbox Code Playgroud)

调试器会告诉您segfault发生的位置:

Program received signal SIGSEGV, Segmentation fault.
0x0040133d in crc_bit (reg=0x0, key=12345, next_bit=0) at rrr.c:4
4           unsigned int msb = (*reg >> (sizeof(*reg)-1)) & 1;
Run Code Online (Sandbox Code Playgroud)

注意reg是0(即NULL),你取消引用它.