Die obige Funktion wird an Pthreads übergeben. Wenn das Programm ausgeführt wird, erhalte ich einen Segmentierungsfehler. Sobald ich den Anruf zu free(sub)
mein Code funktioniert gut kommentieren. Ich kann nicht herausfinden, warum? Können wir Speicher in Threads dynamisch freigeben? Da der Heap unter allen Peer-Threads geteilt wird, die dem Haupt-Thread zugeordnet sind.Freigeben eines Heap zugeordneten Bereichs mit einer Funktion, die von pthred ausgeführt wird, löst Segmentierungsfehler
bearbeiten 1- vollständige Code
void *do_chld(void *arg)
{
int new_fd = (int) arg;
int i,n,val;
char buf[255];
char *sub;
sub = malloc(255 * sizeof(char));
printf("Child thread [%d]: Socket number = %d\n", pthread_self(), new_fd);
/* read from the given socket */
n = read(new_fd,buf,100);
if(n<0){
fprintf(stderr,"Receieving Failed\n");
exit(2);
}
//process
printf("Received %s \n",buf);
val = checkSpelling(buf) ;
if(val){
sub = "Correct Spelling";
}
else{
sub = "InCorrect Spelling";
}
n = 0 ;
n = write(new_fd,sub,strlen(sub));
if(n<0){
fprintf(stderr,"Sending Failed\n");
exit(2);
}
/* close the socket and exit this thread*/
close(new_fd);
free(sub);
pthread_exit((void *)0);
}
Ich bin sicher, dass ich nicht auf den Haufen innerhalb der/* --- Einige Code - */zugreifen. Ich poste das gleiche als Referenz. –
@Eternal - Es könnte stattdessen sein, dass der Wert von "sub" geändert wird - siehe meinen aktualisierten Beitrag für weitere Details. – Justin