pThreads分段错误

时间:2014-09-16 09:24:36

标签: c pthreads malloc

这是传递给线程声明的结构:

   typedef struct  {
              int rowsPerThread;                    
              int StartingRow;                     
              double co[WIDTH][HEIGHT][2];          
              uint64_t total_iters;                

      } thdata;

以下是我如何使用它:(注意malloc)

  /* data passed to each thread */
  thdata *data[threads_num];


  /* create threads */
  for (i=0; i<threads_num; i++)
  {
      data[i]=(thdata *)malloc(sizeof(thdata));
      data[i]->rowsPerThread= rowsPerThread;
      data[i]->StartingRow= i*rowsPerThread;

      for (i=i*rowsPerThread; i<rowsPerThread; i++)
      memcpy(data[i]->co[i], Coordinates[i], sizeof (Coordinates) * HEIGHT * 2);


      pthread_create(&thread[i], NULL, (void *) &threaded_calc, (void *) &data[i]);   
      free(data[i]);
  }

我认为malloc()存在问题。

它给了我分段错误。

1 个答案:

答案 0 :(得分:2)

问题是您free阻止了data[i] forpthread创建thread之后,因为您无法知道data[i]何时在thread有效启动scheduler之前,free可能已被释放

所以,你应该在线程体内调用{{1}}。