Я пытаюсь заполнить векторный символ данными из указателя через ofxTCPClient.
Указатель tmpData получает данные, но я получаю эту ошибку, если пытаюсь вставить данные в вектор.
Даже если я попытаюсь заполнить вектор символом «вручную», вот так:
tcpMainData.push_back ( ‘а’);
я получу ошибку:
libc++abi.dylib: terminating with uncaught exception of type std::bad_alloc: std::bad_alloc
(lldb)
Это моя программа:
#include "ofApp.h"
using namespace std;
vector<char> tcpMainData;
//This is a temporary size variabel, until a function is made.
int tmpDataSize = 100;
char tmpData;//--------------------------------------------------------------
void ofApp::setup(){
}
//--------------------------------------------------------------
void ofApp::update(){
//Listen on the port for tcp data if we are connected to the server
if (!TCPClient.isConnected()) {
state = OFFLINE;
}else if (TCPClient.isConnected() && state != RECEIVING) {
state = LISTENING;
}
//TCP package received
if((int)TCPClient.receiveRawBytes((char *) &tcpMainData, sizeOfTcpChunk) > 1 && state == LISTENING) {
state = RECEIVING;
}
//Filling up vector with tcp data
if (state == RECEIVING) {
for (int i = 0; i < tmpDataSize; i++) {
TCPClient.receiveRawBytes((char *) &tmpData, sizeOfTcpChunk);
tcpMainData.push_back(tmpData);
}
state = LISTENING;
}
}
//--------------------------------------------------------------
void ofApp::draw(){
if (state == OFFLINE) {
ofDrawBitmapString("Press C to connect", 50, 100);
}
}
//--------------------------------------------------------------
void ofApp::keyPressed(int key){
if (key == 'c') {
TCPClient.setup("127.0.0.1", TCPPort);
}
}
Вот мой заголовок, если это актуально:
...
//TCP CONF
ofxTCPClient TCPClient;
int TCPPort = 50014;
int sizeOfTcpChunk = 4; //Size of TCP packages (Chunks)
//Program state
enum clientState {
OFFLINE,
LISTENING,
RECEIVING,
};
clientState state = LISTENING;
Вы не указали, где произошла ошибка.
Здесь есть две вещи не так (я поместил пункты из вашего кода в контекст здесь):
vector<char> tcpMainData;
TCPClient.receiveRawBytes((char *) &tcpMainData, sizeOfTcpChunk)
Вы бросили вектор на символ * неправильно. Так должно быть
(char *) &tcpMainData[0]
и я сильно сомневаюсь, что вы можете использовать это для записи tcpMainData
, Этот акт предназначен только для чтения из вектора. Я думаю, что вы получаете сообщение об ошибке из-за этого.
а также
char tmpData;
TCPClient.receiveRawBytes((char *) &tmpData, sizeOfTcpChunk);
Как упоминал Галик, tmpData — это один байт. Вам нужно что-то вроде символа tmpData[100]
Для справки, подпись функции TCPClient.receiveRawBytes:
int ofxTCPClient::receiveRawBytes(char *receiveBytes, int numBytes)