Побитовый XOR заканчивается в SIGSEGV

У меня есть функция, которая выполняет простое битовое шифрование XOR. Это выглядит так:

void maskData(char* data, int length)
{
for(int i = 0; i < length; i++)
{
int j = i % 4;
cout << bitset<8>(data[i]) << endl << bitset<8>(this->maskingKey[j]) << endl;
data[i] ^= this->maskingKey[j];
}
}

Выходные данные приложения:

01010100
01001011

Тогда он умирает. Я приложил gdb к нему и выяснили, что SIGSEGV-Exception поднят.

01010100
01001011

Program received signal SIGSEGV, Segmentation fault.
0x00000000004100ea in WebSocketLayer::WebSocketFrame::maskData (
this=0x7fffffffe190, data=0x423621 "This is a test", length=14)
at ../BoostTransport/WebSocketLayer.h:130
130                 data[i] ^= this->maskingKey[j];

Я действительно не уверен, почему это происходит, мне кажется, все в порядке.

Редактировать: Больше кода:

    void setData(char* data, int length)
{
this->maskData(data, length);

// ... ...
}

wf.setData("This is a test", strlen("This is a test"));

Цикл непосредственно терпит неудачу в первом запуске, что означает i а также j 0

2

Решение

держу пари data указывает на постоянную. Вы не можете изменить константу, вот что делает их константами. Так что-нибудь сопоставимое с maskData("hello", 5); незаконно Это также незаконно:

char *j = "This is a test";
maskData(j, strlen(j));

Вот, j указывает на постоянную. Вы не можете изменить константу.

4

Другие решения

Других решений пока нет …