SIGSEGV где-то не должно быть, указатель NULL отсутствует - PullRequest
0 голосов
/ 29 ноября 2018

Я использую gdb test core и получаю это:

Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x0000557ce64b63f8 in _create (str=str@entry=0x557ce80a8820 "SEND")
    at system.c:708
708         data->res = command->data->res;
(gdb) bt
#0  0x0000557ce64b63f8 in _create (str=str@entry=0x557ce80a8820 "SEND")
    at system.c:708
#1  0x0000557ce64b2ef1 in make_command (s=<optimized out>, cmd=0x557ce809cb70) at command.c:121
#2  0x0000557ce63aefdf in main (argc=<optimized out>, argv=0x7fff19053278) at main.c:394
(gdb) p *command
$1 = {status = 1, data = 0x7f21027e9a80, sum = 1543465568, time = 0, msg = { str = 0x7f20fd19f080 "GOOD", len = 4}, id = 2}
(gdb) p *command->data
$2 = {status = 1, item = 0x7f21027eb780, res = 0x7f2100990b00, sum = 1133793665}
(gdb) p *command->data->res
$3 = {msg = { str = 0x7f21010a5500 "Hi, test, test"..., len = 14}, status = 1}
(gdb) p *data
$4 = {status = 1, type = 5, res = 0x0, id = 2}

, как вы можете видеть, указатель command и command->data и data все действительны, почему произошел этот SIGSEGV?

1 Ответ

0 голосов
/ 29 ноября 2018

почему произошел этот SIGSEGV?

Мы не можем сказать.

Одна из возможных причин: какой-то другой код на самом деле выполняется и дает сбой.

Это может произойти, если system.c был отредактирован или обновлен, но программа не была перестроена с новым источником.Или, если отображение компилятором счетчика программы на файл / строку является неточным (это часто происходит с оптимизированным кодом).

Если вы редактируете свой вопрос, чтобы показать выходные данные из list _create, disas $pc и info registersМы можем рассказать вам больше.

...