我正在用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;
}
}
//我正在使用函数将文件数据写入socket。
//当一个线程处理这个函数时,文件指针将是线程的本地,或者对于所有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);
}