segmentation fault при очистке выделенной памяти

224
07 июля 2018, 14:20

Что я делаю не так ? Программа грубо говорят пишет в компорт пакет и читает ответ. Пример кода:

void basicF(uint8_t comand)  
{
io_service io;
serial_port port(io);
switch(comand)
{
    case 0x01:
    {
        read_version_firmware_master*pack = make_read_firWare_master(1,0);
        int sizeOfPack = 13 + (int)pack->header.sizeData + 2; //13 - длина пакета. 2 - црц
        port.open("COM1");
        port.set_option(serial_port_base::baud_rate(115200));
        write(port,buffer(pack,sizeOfPack));
        printPack((unsigned char*)pack);
        port.close();
        delete pack;
        getAnsw();
        break;
    }
}
}

На данном этапе все корректно и программа работает.

void getAnsw()
{
io_service io;
serial_port port(io);
port.open("COM1");
port.set_option(serial_port_base::baud_rate(115200));
unsigned char c[13];
read(port, buffer(c,13));
uint16_t s = c[11];
printf("%hi\n", s);
unsigned char *b = new unsigned char [13+2+s];
for (int i=0;i<13;i++)
{
    b[i] = c[i];
}
read(port, buffer(b+13,(int)s+2));
port.close();
printPack(b);
if (checkCrc(b,(int)s))
{
    printf("%s\n", "package in client response is received");
}
else 
{
    printf("%s\n", "Error   ");
}
//delete [] b;
}

Теперь если раскоментировать освобождение памяти то программа выдает ошибку. С чем это может быть связанно, указатель точно не нулевой так как я его передаю и вывожу значение на экран.

Answer 1

Логично. Создавайте массив правильно. Например, так

unsigned char *b = new unsigned char[19];

Но думаю, что в этом случае лучше вообще просто объявить массив прямо на стеке

unsigned char b[19];

не нужно будет освобождать память, быстрее работает, меньше потребляет памяти.

READ ALSO
Socket получить body html

Socket получить body html

Отправляю на сервер запрос и получаю данные

241
bool vs bit * 8

bool vs bit * 8

Здравствуёте, у меня достаточно конкретный вопрос: Стоит ли пренебрегать переменными bool типа опционной переменной из, например, 8 бит:

224
Нужно объяснить маленькую часть кода

Нужно объяснить маленькую часть кода

Есть спрайтовая анимация

222
Каждый h3 тэг с новым размером шрифта

Каждый h3 тэг с новым размером шрифта

Пожалуйста не предлагайте классы или idНужно сделать так, чтобы каждый новый тэг h3 появлялся с новым размером шрифта

199