0
我在Bluez中創建了一個基於藍牙的服務器程序,它基本上處理來自多個設備的連接。我已經構建了兩個線程;一個用於掃描遠程設備,另一個用於連接廣播服務的設備。再次,從線程池中爲每個新連接的設備提取單獨的線程,然後通過RFCOMM通道與服務器進行通信。線程池中的分段錯誤
建立與遠程設備的連接後,服務器將向遠程藍牙設備發送命令。一旦遠程設備回覆,服務器讀取該回復並將其存儲。
現在,問題是每當我從設備收到回覆時程序崩潰,說明「分段錯誤」。任何人都可以告訴我一個可能的原因。這裏給出了代碼的一部分。
void startCommunication(int newSocket)
{
char buf[MODZ_MAX_DATA_SIZE] = "\0";
char previousData[ MODZ_MAX_DATA_SIZE ] = "\0";
time_t recvTime, prevRecvTime;
char dataToBeSent[ 4*MODZ_MAX_DATA_SIZE ] = "\0";
char *result;
if(sendDataToClient(newSocket, CMD_SEND) == EXT_ERROR) //send acknowledgement first
printf("Couldn;t send ack\n");
else { printf("Date send woot! woot! %s\n", CMD_SEND); }
memset(buf, '0', sizeof(buf));
while(1){
recvTime = time((time_t *)0);
if(readDataFromClient(newSocket, buf) == EXT_ERROR){
printf("Read Error\n");
break;
}
printf("Data received = %s\n", buf);
strcpy(previousData, buf);
// store the data in a file and send to web
// check if the web has any data to send and if there is then send
result = "here we update the challenge";
strcpy(dataToBeSent, result);
free(result);
result = NULL;
//strcpy(buf, "We will soon update the database");
if(sendDataToClient(newSocket, dataToBeSent) == EXT_ERROR){
break;
}
}
close(newSocket);
if(result != NULL){
free(result);
}
printf("\n****************Device disconnected***************\n");
}
您是否嘗試使用'valgrind'? – pajton 2010-04-07 22:24:08
'Segmentation Fault'發生在哪裏?你用gdb調試過嗎? – 2010-04-07 22:29:42
我得到了解決方案...在免費(結果)部分發生故障...有某種線程問題。 – sfactor 2010-04-07 23:10:37