2013-06-07 4 views
1

Я пытаюсь понять операцию побитового в следующем коде, но это приводит к ошибке сегментациипобитовое операции причина неисправности Сегментация

#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 

[email protected]:/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; 

Может ли кто-нибудь пролить свет на то, что я делаю неправильно, чтобы вызвать ошибку сегментации?

ответ

7

Проблема не в сдвиге, это факт, что вы не выделяете память для opt.

Один из способов исправить это следующим образом:

uint8_t opt[2]; 
+0

спасибо, я забыл основы, что я должен выделить пространство указателя перед его использованием –

Смежные вопросы