Chào các pro, mình là newmem nên nếu có post sai chỗ thì xin chiếu cố cho ạ. Mình đang làm một bài tập sử dụng thư viện pthread.h để giải phuơng trình bậc 2 ax2+bx+c=0(a#0) nhưng trong quá trình chạy trên ubuntu thì bị lỗi:
$gcc Assignment1.c -lpthread
$./a.out 2 3 1
Segmentation Fault (Core Dump)

Code:
#include <pthread.h>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>

float a,b,c;
void *runner(void *param[]);

int main(int argc, char *argv[])
{
int i;
pthread_t tid;
pthread_attr_t attr;

if (argc != 4) {
	fprintf(stderr,"usage: a.out <float value> <float value> <float value> \n");
	return -1;
}
for(i=1;i<4;i++)
if (atoi(argv[i]) < 0) {
	fprintf(stderr,"Argument %d must be non-negative\n",atoi(argv[i]));
	return -1;
}
if(argv[1]!=0) fprintf(stderr,"Argument %d must be non-zero",atoi(argv[i]));
pthread_attr_init(&attr);
pthread_create(&tid,&attr,(void*) runner,(void *) &argv);//<~~~~~maybe wrong here
pthread_join(tid,NULL);
}

void *runner(void *param[])//<~~~~~~and here
{
a=atoi(param[1]),b=atoi(param[2]),c=atoi(param[3]);
float d,x1,x2;
d=b*b-4*a*c;
if(d<0) printf("No Solution");
else if(d=0) printf("Solution x=%f",(-b/(2*a)));
else if(d>0)
{
x1=(-b-sqrt(d))/(2*a);
x2=(-b+sqrt(d))/(2*a);
printf("Solution:\nx1=%f\nx2=%f",x1,x2);
}
pthread_exit(0);
}

Và một bài sử dụng WIN32 API thư viện windows.h để tìm tất cả các số đối xứng trong khoảng từ 100->n (n>=100, n<1000)

Code:
#include <stdio.h>
#include <stdlib.h>	
#include <windows.h>

int m[1000]={0};

DWORD WINAPI Summation(PVOID Param)
{
    DWORD n = *(DWORD *)Param;
    int a,b,c,i;
    for(100;i<n;i++)
    c=i%10;
    b=(i/10)%10;
    a=(i/100)%10;
    if(a=c) m[i]=i;
}
int main(int argc,char *argv[])
{
    DWORD ThreadId;
    HANDLE ThreadHandle;
    int Param;
    if (argc != 2) 
    {
	    fprintf(stderr,"An integer parameter is required\n");
        return -1;
    }
    Param = atoi(argv[1]);
    
    if (Param<100||Param>=1000) 
    {
    	fprintf(stderr, "An integer >=100 and <=999 is required \n");
        return -1;
    }
    ThreadHandle = CreateThread(NULL, 0, Summation, &Param, 0, &ThreadId);

    if (ThreadHandle != NULL) {
	WaitForSingleObject(ThreadHandle, INFINITE);
	CloseHandle(ThreadHandle);
	printf("Total of symmetrical numbers in this range (>=100&<=%d",Param);
	for(int i=100;i<=Param;i++)
	printf("%d\n",m[i]);
}
}

Mong các pro xem và kiểm tra giùm.
Thanks!