【发布时间】:2012-06-28 17:06:31
【问题描述】:
我的程序包含以下代码。
pthread_t PThreadTable[32];
for (i=1; i<P; i++) // Checked with P = 4
{
long i, Error;
printf( "pthread_create %d!\n", i );
Error = pthread_create(&PThreadTable[i], NULL,
(void * (*)(void *))(SlaveStart), NULL);
if (Error != 0)
{
printf("Error in pthread_create().\n");
exit(-1);
}
}
SlaveStart();
代码在调用pthread_create 时出现分段错误(通过gdb 和valgrind 检查)。为什么会这样?
【问题讨论】:
-
这通常是程序中其他地方的内存损坏的症状。请发布minimal working example,我们可以自己编译并观看崩溃。另外,请查看 第一个 valgrind 告诉您的无效内存访问——打赌它不在这里。
-
这不是一个最小的工作示例,你可以创建一个裸的 SlaveStart。
-
为什么要转换函数指针?如果它具有正确的类型,则不必这样做。如果它有另一种类型,你会有一个段错误:)
-
鉴于接受的答案,我想在这种情况下我可以通过添加缺失的部分来诊断问题。但是,如果您展示了我们可以复制、粘贴、编译和观察崩溃的东西——根本不需要编辑它——你可以确信我们实际上正在查看相同的问题 你是。这种问题几乎总是与丢失的部分有关。这么多问题我都没有复现,只是因为我填错的部分不同,所以我不再费心了。
标签: c linux gcc segmentation-fault