我昨天问了一个问题在多线程服务器中使用套接字。在这个问题中,我描述了多线程服务器中 Solaris 下的分段错误。现在我找到了错误的核心并编写了代码,简短地演示了它:
#include <stdlib.h>
#include <pthread.h>
int main(int argc, char *argv[])
{
pthread_attr_t *attr;
attr = (pthread_attr_t *)malloc(sizeof(pthread_attr_t));
pthread_attr_setdetachstate(attr, PTHREAD_CREATE_DETACHED);
malloc(0);
malloc(0); //Segmentation fault there
return 0;
}
第二个 malloc 因分段错误而崩溃。虽然此代码正常执行:
#include <stdlib.h>
#include <pthread.h>
int main(int argc, char *argv[])
{
pthread_attr_t *attr;
attr = (pthread_attr_t *)malloc(sizeof(pthread_attr_t));
// pthread_attr_setdetachstate(attr, PTHREAD_CREATE_DETACHED);
malloc(0);
malloc(0);
return 0;
}
你能解释一下错误的原因吗?
PS:我用gcc -pthreads -lpthread -D_REENTRANT
钥匙编译。