当前位置: 技术问答>linux和unix
请问运行多线程程序后出现*** glibc detected *** double free or corruption (out): 0x08cee4d8 ***是为什么?
来源: 互联网 发布时间:2016-03-22
本文导语: 下面的代码是我从网上抄来的并且作了一点小修改。当我编译后,(执行程序名称为thread1),采用“./thread1 303 1”这个参数运行时,出现了“*** glibc detected *** double free or corruption (out): 0x08cee4d8 ***”,请问这...
下面的代码是我从网上抄来的并且作了一点小修改。当我编译后,(执行程序名称为thread1),采用“./thread1 303 1”这个参数运行时,出现了“*** glibc detected *** double free or corruption (out): 0x08cee4d8 ***”,请问这是为什么呢?
我运行ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
pending signals (-i) 1024
max locked memory (kbytes, -l) 32
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 77824
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
结果是,我想问下在不修改stack size参数的情况下,出现这个问题应该怎样解决
我的系统是REDHAT AS4,下面是代码,谢谢
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define MAX 10
typedef struct parameter{
int thread_sn;
int sleep_time;
}PARAMETER;
pthread_t *threadid_array;
void *threadFunc(void *arg)
{
PARAMETER *parameter=(PARAMETER *)arg;
//printf("线程序号是%d,休眠时间是%dn",(*parameter).thread_sn,(*parameter).sleep_time);
unsigned long i;
//printf ("thread%d : I'm thread %un",(*parameter).thread_no,(*parameter).sleep_time);
/*
for(i=0;isleep_time=sleep_time;
threadid_array=(pthread_t *)malloc(thread_no*sizeof(pthread_t));
//printf("准备休眠时间是%dn",parameter->sleep_time);
pthread_t temp_thread;
for(no=1;nothread_sn=no;
if((temp = pthread_create(&temp_thread, NULL, threadFunc, (void *)parameter)) != 0) //comment2
{
printf("线程%d创建失败!n",no);
if(EAGAIN==temp)
{
printf("系统限止对线程%d的创建n",parameter->thread_sn);
}
else if(EINVAL==temp)
{
printf("创见线程%d时,第二个参数非法n",parameter->thread_sn);
}
else if(ENOMEM==temp)
{
printf("创见线程%d时,内存溢出n",parameter->thread_sn);
}
}
else
{
threadid_array[no]=temp_thread;
//printf("线程%d被创建n",no);
}
}
}
void thread_wait(int thread_no)
{
int no;
for(no=0;no
我运行ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
pending signals (-i) 1024
max locked memory (kbytes, -l) 32
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 77824
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
结果是,我想问下在不修改stack size参数的情况下,出现这个问题应该怎样解决
我的系统是REDHAT AS4,下面是代码,谢谢
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define MAX 10
typedef struct parameter{
int thread_sn;
int sleep_time;
}PARAMETER;
pthread_t *threadid_array;
void *threadFunc(void *arg)
{
PARAMETER *parameter=(PARAMETER *)arg;
//printf("线程序号是%d,休眠时间是%dn",(*parameter).thread_sn,(*parameter).sleep_time);
unsigned long i;
//printf ("thread%d : I'm thread %un",(*parameter).thread_no,(*parameter).sleep_time);
/*
for(i=0;isleep_time=sleep_time;
threadid_array=(pthread_t *)malloc(thread_no*sizeof(pthread_t));
//printf("准备休眠时间是%dn",parameter->sleep_time);
pthread_t temp_thread;
for(no=1;nothread_sn=no;
if((temp = pthread_create(&temp_thread, NULL, threadFunc, (void *)parameter)) != 0) //comment2
{
printf("线程%d创建失败!n",no);
if(EAGAIN==temp)
{
printf("系统限止对线程%d的创建n",parameter->thread_sn);
}
else if(EINVAL==temp)
{
printf("创见线程%d时,第二个参数非法n",parameter->thread_sn);
}
else if(ENOMEM==temp)
{
printf("创见线程%d时,内存溢出n",parameter->thread_sn);
}
}
else
{
threadid_array[no]=temp_thread;
//printf("线程%d被创建n",no);
}
}
}
void thread_wait(int thread_no)
{
int no;
for(no=0;no