2012-06-18 2 views
0

Предположим, что нет никаких проблем с моим заголовочным файлом и некоторыми включенными библиотеками. Я использую 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)»! Кто-нибудь может решить мою проблему?

ответ

3

Ваш номер delete sendBuff; здесь, но вы никогда не выделяли память самостоятельно. Попробуйте удалить эту строку.

+0

Это действительно помогает! но, почему мне нужно удалить «delete sendbuff» здесь? –

+1

@Kingfisher: 'std :: string' управляет памятью для вас, поэтому вы никогда не должны называть' delete' в памяти, управляемой 'std :: string'. –