Segfault при использовании memcmp()

Я получаю сегфо в этой строке:

if(memcmp(datap, 0x38 , 1) == 0)

Это след от GDB, вы можете увидеть здесь:

Program received signal SIGSEGV, Segmentation fault.
0x00000000004010f1 in processMTMHeader (
    datap=0x2aaaab0b001c "1\34\66\63\36\65\34\66.\36\70\34AAAA1.ETR\36\67\64\34U\35\36\61\60\63\34\61\36\62\65\70\34\60\71:00:00\36\62\70\61\34\60\71:00:00\36\64\62\67\34\63\60\60\60\36\65\63\34\63\36\66\63\34\63\36\66\67\34\63\36\70\60\34\63\36\70\61\34\61\60\60\60\36\70\62\34\60\71:00:00\36\70\63\34\61\60\60\60\3Ea", h=0x7fffffffb960,
    endmmsgp=0x2aaaab0b0090 "\3Ea") at unzipper.c:91
91      if(memcmp(datap, 0x38 , 1) == 0)

1 ответ

Решение

Вы используете целочисленное значение 0x38 в качестве указателя, что, скорее всего, не очень хорошая идея.

Вы, вероятно, должны иметь:

const uint8_t data[] = { 0x38 };

if(memcmp(datap, data, sizeof data) == 0)

Или, конечно, так как это всего лишь один байт:

if(((uint8_t *) datap)[0] == 0x38)

ОБНОВЛЕНИЕ Предполагая, что datap объявлен unsigned char *datapмы можем бросить бросок и просто сделать:

if(*datap == 0x38)
Другие вопросы по тегам