Что я делаю не так ? Программа грубо говорят пишет в компорт пакет и читает ответ. Пример кода:
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;
}
Теперь если раскоментировать освобождение памяти то программа выдает ошибку. С чем это может быть связанно, указатель точно не нулевой так как я его передаю и вывожу значение на экран.
Логично. Создавайте массив правильно. Например, так
unsigned char *b = new unsigned char[19];
Но думаю, что в этом случае лучше вообще просто объявить массив прямо на стеке
unsigned char b[19];
не нужно будет освобождать память, быстрее работает, меньше потребляет памяти.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости