Предположим, что нет никаких проблем с моим заголовочным файлом и некоторыми включенными библиотеками. Я использую Winsock2.Что случилось с моим классом ClientConnection? C++
//main.cpp and this code is okie, I omit some codes for readable reason
SOCKET ClientSocket;
ClientSocket = INVALID_SOCKET;
ClientSocket = accept(ListenSocket, NULL, NULL);
cout <<"a client is connected" << endl;
ClientConnection connection(ClientSocket);
connection.run();
//ClientConnection.h I tested any function and it's okie
class ClientConnection{
private:
SOCKET connectedSocket;
bool connected;
public:
ClientConnection(const ClientConnection &con);
ClientConnection(SOCKET s);
int processMessage(string message);
void sendMessage(string message);
string recvMessage();
int run();
void printSomething(); //function just print something such as :"Here"
};
В run()
функции, я называю recvMessage()
, чтобы получить сообщение от клиента, то я называю processMessage(message)
. Это мой processMessage(message)
и sendMessage
:
void ClientConnection::sendMessage(string mess){
const char* sendBuff = mess.c_str();
int error = send(this->connectedSocket,sendBuff, (int)strlen(sendBuff), 0);
delete sendBuff;
return ;
}
int ClientConnection::processMessage(string message){
cout << "This is message from client:\n" << message << endl;
ImageProcessingPlugin *plugin = new ImageProcessingPlugin();
plugin-> processMessage(*this, message);
delete plugin;
return 0;
}
Это ImageProcessingPlugin:
// ImageProcessingPlugin.h
class ImageProcessingPlugin : public Plugin{
public:
ImageProcessingPlugin();
void processMessage(const ClientConnection &connection, string message);
};
// ImageProcessingPlugin.cpp
void ImageProcessingPlugin::processMessage(const ClientConnection& _connection, string message){
ClientConnection connection(_connection);
connection.printSomething() // It's okie
connection.sendMessage("Server received"); // Problem goes here!!
return;
}
После отладки, когда я звоню printSomething()
в plugin->processMessage
, это еще нормально, но когда я иду в sendMessage
, клиент все еще есть сообщение «Сервер получено» с сервера, но произошла ошибка: «_Block_Type_IS_VALID (pHead-> nBlockUse)»! Кто-нибудь может решить мою проблему?
Это действительно помогает! но, почему мне нужно удалить «delete sendbuff» здесь? –
@Kingfisher: 'std :: string' управляет памятью для вас, поэтому вы никогда не должны называть' delete' в памяти, управляемой 'std :: string'. –