Я получаю ошибку сегментации, которую я сузил до цикла for
в функции обратного вызова. Странно, потому что программа раньше работала, теперь это не так!Фиксация ошибки сегментации
struct debuggerth_command debuggerth_protocol[] = { /*
* Note: These strings are NOT null-terminated. The
* strings are 4 bytes long for memory alignment and
* integer-cast comparisons.
*/
{ "run ", debuggerth_startprocess },
{ "stop", 0 },
{ "inp ", 0 },
{ "sig ", 0 },
{ 0, 0 }
};
И это код:
int debuggerth_callback (struct libwebsocket_context * context,
struct libwebsocket * wsi,
enum libwebsocket_callback_reasons reason,
void * user,
void * in,
size_t len){
switch (reason) {
case LWS_CALLBACK_RECEIVE:
if (len < 4){
/* send error */
return -1;
}
/* Getting a segmentation fault
* within this loop.
*/
// I used this break to determine where the seg fault starts
// break
int i = 0;
for (; debuggerth_protocol[i].cmd; i++)
if (cmpcmd (debuggerth_protocol[i].cmd, in)) break;
//break;
if (!debuggerth_protocol[i].cmd){
int byteswritten = sprintf
(debuggerth_message,
debuggerth_format,
debuggerth_headers[0],
debuggerth_errors [0]);
libwebsocket_write (wsi, debuggerth_message,
byteswritten,
LWS_WRITE_TEXT);
return -1;
}
break;
Это сравнение строк макроса:
#define cmpcmd(cmd, str) ((*(int*)(cmd)) == (*(int*)(str)))
Кто-нибудь есть какие-нибудь идеи?
Почему 'debuggerth_protocol [i] .cmd' значение сравнения в вашем цикле for? Не будет ли это строкой, когда это должно быть числовое значение (например, количество команд внутри вашего 'debuggerth_protocol array'? – Alan
Вы проверили' in! = 0'? – dyp
@DyP, я этого не сделал. библиотека, которая делает обратный вызов, проверяет это заранее.Я могу просто быть уверенным, хотя. – tay10r