user3032010
user3032010

Reputation: 47

segmentation fault during execution of program

I have written a program to create 10 threads and run them normally. The Program is running fine but at the end it gives a segmentation fault. What is this fault, what is causing it, and how do I resolve it? My code is :

#include<stdio.h>
#include<pthread.h>
void *print(void *num);

int main()
{
    pthread_t tid[10];
    int n,check;
    void *exitstatus;
    for(n=1;n<=10;n++)
    {
        check=pthread_create(&tid[n],NULL,print,(void *)&n);
        if(check=0)
            printf("thread created");
        pthread_join(tid[n],&exitstatus);
    }

    return 0;

} 

void *print(void *num)
{
    int i,*val=(int *)num;
    for(i=0;i<(5);i++)
        printf("Hello World!!!(thread %d )\n",*val);
}

Upvotes: 1

Views: 206

Answers (2)

Aniket Inge
Aniket Inge

Reputation: 25725

You are accessing an array beyond its index. It is undefined behavior.

your array t[10] starts at index t[0] and should end at t[9] -

for(n = 0; n < 10; n++) { 
 //your stuff
}

Also check == 0 is how you check equality. check = 0 will assign 0 to check

So your code must look like this:

#include<stdio.h>
#include<pthread.h>
void *print(void *num);

int main()
{
    pthread_t tid[10];
    int n,check;
    void *exitstatus;
    for(n = 0; n < 10; n++)
    {
        check=pthread_create(&tid[n], NULL, print, (void *)&n);
        if(check == 0)
            printf("thread created");
        pthread_join(tid[n], &exitstatus);
    }
    return 0;
} 

void *print(void *num)
{
    int i,*val=(int *)num;
    for(i = 0; i < 5; i++)
        printf("Hello World!!!(thread %d )\n", *val);
}

Another important note on programming style: Please use proper indentation and use whitespace judiciously. Most programming errors and bugs can be eliminated if proper indentation and whitespace is used. For example, one white space before and after an operator in the for loop, and between parameters while calling a function after , and before the next parameter.

Upvotes: 3

masoud
masoud

Reputation: 56529

You have many flaws:

for(n=1;n<=10;n++) // No, The array starts from 0 and lasts on 9

Try this

for(n=0;n<10;n++)

if(check=0) // No, this will assign 0 to check instead of compare it

Try this

if(check==0)

Upvotes: 7

Related Questions