void *do_chld(void *arg)
{
char *sub;
sub = malloc(255 * sizeof(char));
/*
------ Some Code ----
*/
free(sub);
pthread_exit((void *)0);
}
上記の関数はpthreadsに渡されます。プログラムが実行されると、私はセグメンテーションフォールトを取得します。私がfree(sub)
への呼び出しにコメントすると、私のコードは正常に動作します。なぜ私は理解できませんか?スレッド内のメモリを動的に解放しますか?ヒープはメインスレッドに関連付けられたすべてのピアスレッドで共有されるためです。あなたが/* -- Some Code -- */
せずにプログラムを実行しようとした -pthredによって実行された関数を使用してヒープ割り当て領域を解放すると、セグメンテーションフォールトをスローする
編集の1-フルコード
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);
}
私は/ * ---いくつかのコード - * /内のヒープにアクセスしていないと確信しています。私は参照のために同じを転記しています。 –
@Eternal - 代わりに、 'sub'の値が変更されている可能性があります。詳細は、最新の記事を参照してください。 – Justin