2

次のコードでビット単位の操作を理解しようとしていますが、セグメンテーション違反が発生します

#include <stdio.h>
#include <stdint.h>

 main()
 {
     uint16_t newmss = 1024;
     uint8_t  *opt;
     unsigned int i = 0;

     opt[i] = (newmss & 0xff00) >> 8;
     opt[i+1] = newmss & 0x00ff;

     fprintf(stderr, "opt[0] is %d", opt[0]);
     fprintf(stderr, "opt[1] is %d", opt[1]);

 }

でコンパイルgcc -g -o shift shift.c

次にシフトを実行すると、セグメンテーション違反が発生しました

# ./shift
Segmentation fault

using gdb to debug

(gdb) run
Starting program: /home/vincent/shift

root@vincent-desktop:/home/vincent# gdb shift
GNU gdb (GDB) 7.1-ubuntu

(gdb) run
Starting program: /home/vincent/shift

Program received signal SIGSEGV, Segmentation fault.
0x0804843f in main () at shift.c:11
11      opt[i] = (newmss & 0xff00) >> 8;

セグメンテーション違反を引き起こすために私が間違っていることに誰かが光を当てることができますか?

4

1 に答える 1

7

問題はシフトではなく、 にメモリを割り当てていないことですopt

これを修正する 1 つの方法は次のとおりです。

 uint8_t  opt[2];
于 2013-06-07T20:11:28.290 に答える