vector в c++. Метод size() возвращает неверное значение

Все о микроконтроллерах: AVR, PIC, STM8, STM32, Arduino, Altera, Xilinx, все что угодно. Этот раздел для всего что клацает байтиками.
Vitalik
Сообщения: 39

Сообщение Vitalik » 17 авг 2014, 18:57

Всем добрый день. Пытаюсь сделать чтение данных из ком-порта. Вместо обычного массива использую vector. Все работает, данные записываются и читаются из вектора, но я не могу узнать его размер, потому что метод size() возвращает всегда то значение, которое было задано при его создании. Например: vector <char> data(5). Метод data.size() всегда возвращает 5, даже если реально в векторе больше элементов. Использую CodeBlocks, компилятор MinGW32 4.8.1. Функция работает в отдельном потоке.
Подскажите, в чем может быть проблема?

Код: Выделить всё

void ReadCOM()
{

    DWORD receive_size;
    DWORD number_bytes;
    DWORD mask;
    DWORD port_status;
    DWORD errors;

    vector <unsigned char> received_data(5);

    COMSTAT comstat;

    overlapped_read.hEvent = CreateEvent(NULL, TRUE, TRUE, NULL);
    SetCommMask(serial_handle, EV_RXCHAR);

    while (1)
    {
        WaitCommEvent(serial_handle, &mask, &overlapped_read);

        port_status = WaitForSingleObject(overlapped_read.hEvent, INFINITE);

        if(port_status==WAIT_OBJECT_0)
        {
            ClearCommError(serial_handle, &errors, &comstat);
            number_bytes = comstat.cbInQue;
            cout << "-------" << received_data.size() << "--------" << endl;

            ReadFile(serial_handle, &received_data[0], number_bytes, &receive_size, &overlapped_read);

            for(unsigned int i=0; i<number_bytes; i++)
            {
                cout << received_data[i];
            }
            cout << endl;

        }
    }
}

tomatniy
Сообщения: 70
Откуда: Киев

Сообщение tomatniy » 10 ноя 2014, 19:43

Так использовать данный контейнер вместо обычного массива нельзя:
ReadFile(serial_handle, &received_data[0], number_bytes, &receive_size, &overlapped_read);

Используйте data.push_back(..) функцию для добавления элементов.

Вернуться в «Микроконтроллеры и ПЛИС»



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 10 гостей