创建 线程 遇到 program received signal SIGSEGV segmentation fault

snake_tiger 2008-10-09 03:00:24

大家好,我是一个初学者,现在遇到一个问题,希望能得到你的帮助!

问题:
在创建线程(pthread_create)时出现 program received signal SIGSEGV segmentation fault

代码段:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<pthread.h>

void* task1(void* ptr);

int main()
{
char * p=new char[10];
strcpy(p,"Helloworld");

pthread_t thrd1;

pthread_create(&thrd1,NULL,task1,(void *)p );
sleep(10);
return 0;
}
void* task1(void* ptr)
{
char* str=(char*)ptr;
printf("%s\n",str);
sleep(1);
}
...全文
4220 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
knief不懂就问 2011-11-17
  • 打赏
  • 举报
回复
恩恩恩恩恩
snake_tiger 2008-10-16
  • 打赏
  • 举报
回复
问题 解决了 原因是:在使用Kdevelop 时候没有添加 pthread 库
通过
在"项目->配置->连接器选项"的标签面中,在附加库一栏中填入你所用到的库
-lpthread
然后再automake一下,编译,运行。

就OK了
snake_tiger 2008-10-09
  • 打赏
  • 举报
回复
我用KDbg 调试 得出 执行到 pthread_create(&thrd1,NULL,task1,(void *)p );
显示 program received signal SIGSEGV segmentation fault

然后程序就终止了

快乐田伯光 2008-10-09
  • 打赏
  • 举报
回复
我用你的程序原搬来测试一下是没有问题啊.

[Quote=引用 4 楼 snake_tiger 的回复:]
strcpy(p,"Helloworld");
改过来了

还是有问题:
创建 线程 pthread_create(&thrd1,NULL,task1,(void *)p );
[/Quote]
bshawk 2008-10-09
  • 打赏
  • 举报
回复
guosha 所言是对的! 可以个p多分配点内存!

try:
char * p=malloc(32);


另外,你是怎么确定是pthread_create(&thrd1,NULL,task1,(void *)p ); 这句话出的问题?

GOOD LUCK!

snake_tiger 2008-10-09
  • 打赏
  • 举报
回复
strcpy(p,"Helloworld");
改过来了

还是有问题:
创建 线程 pthread_create(&thrd1,NULL,task1,(void *)p );
快乐田伯光 2008-10-09
  • 打赏
  • 举报
回复
那句看上去没有问题啊。

下面这句倒是溢出了一个字符。
strcpy(p,"Helloworld");
[Quote=引用 2 楼 snake_tiger 的回复:]
是这句执行时 出错 pthread_create(&thrd1,NULL,task1,(void *)p );
[/Quote]
snake_tiger 2008-10-09
  • 打赏
  • 举报
回复
是这句执行时 出错 pthread_create(&thrd1,NULL,task1,(void *)p );
快乐田伯光 2008-10-09
  • 打赏
  • 举报
回复
strcpy(p,"Helloworld");
这句有问题吧

23,110

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧