apanimesh061 0 Junior Poster

Here is a program to create two threads in which parent thread read the count of character in inputting string and child thread reverse the string up to that count !

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>

struct pass {
   int c;
   char *arr;
};

void *rev(void *s) {
   printf("In rev, before dec !\n");
   struct pass* p = (struct pass*) s;
   int count, i, j=0;
   char *str, *use;
   count = p->c;
   str = p->arr;
   printf("In rev, after dec, before loop !\n");
   for (i=count-1 ; i>=0; i--) {
      use[j] = str[i]; 
      j++;
   }
   printf("In rev, after loop !\n");
   str[count] = '\0';
   puts(str);
}

void *count(void *arg) {
   printf("In count, before dec!\n");
   char *str;
   str = (char*) arg;
   int i, l, count;
   pthread_t cthr;
   printf("In count, after dec!\n");   
   struct pass s;
   s.c = count = 0;
   s.arr = str;
   printf("Before pthread cthr !\n");
   pthread_create(&cthr, NULL, rev, &s);
   printf("After pthread cthr !\n");   

   printf("Before pthread cthr join !\n");
   pthread_join(cthr, NULL);
   printf("Before pthread cpthr join !\n");

   while (count != l) {
      count += 1;
   }
}

int main(void) {
   pthread_t pthr;
   int len;
   char *string = "Animesh Pandey";
   len = strlen(string);
   printf("Before pthread pthr !\n");
   while ()
   pthread_create(&pthr, NULL, count, (void*) string);
   printf("After pthread pthr, before join !\n");   
   pthread_join(pthr, NULL);
   return 0;
}

OUTPUT:

Before pthread pthr !
After pthread pthr, before join !
In count, before dec!
In count, after dec!
Before pthread cthr !
After pthread cthr !
Before pthread cthr join !
In rev, before dec !
In rev, after dec, before loop !
In rev, after loop !
Segmentation fault

Am I going right ... ?
Please help !!!!
Thanx :)