我正在用 c++(linux) 编写一个多线程服务器。我的问题是我的代码在最初的几个请求中运行良好,但之后它显示“free:Invalid pointer”。我知道这个错误可能来自我的代码的任何部分,但是对于下面的代码片段,如果我走上正轨,我想知道建议。
// 这是 pthread_create 中使用的辅助函数
void *Parse::serveRequest_helper(void *c)
{
Parse *P1 =(Parse *)c;
P1->serveRequest();
}
// 在这个函数上 10 个线程在持续工作
void Parse::serveRequest()
{
pthread_detach(pthread_self());
while(1)
{
pthread_mutex_lock(&print_lock);
if(requestqueue.empty())
pthread_cond_wait(&print_cond, &print_lock);
SendData *S = new SendData;
clientInfo c;
cout<<"Inside Serving thread"<<endl;
c = requestqueue.front(); //assuming this queue has data coming from some other scheduler thread function
requestqueue.pop();
S->requestPrint(c);
delete S;
pthread_mutex_unlock(&print_lock);
cout<<" Inside Thread is out"<<endl;
}
}
// 下面的函数我用来将文件的数据写入套接字。
// 当一个线程将处理这个函数时,文件指针将是该线程的本地指针,或者对于所有 10 个线程,它都是全局的 .. ?
void SendData::requestPrint(clientInfo c)
{
if (write(c.accept,"Requested File Data :", 21) == -1)
perror("send");
ifstream file;
file.open(c.filename.c_str());
if (file.is_open())
{
string read;
while (!file.eof() )
{
getline(file,read);
if (write(c.accept, read.c_str(), (size_t)read.size()) == -1)
perror("send");
}
}
file.close();
close(c.accept);
}