2.传递参数错误,pthread_create传递的是"&a",也就是数组的起始地址的地址,你只是改变数组值,不需要对起始地址更改,完全可以传递 a,而且看你thread_fun函数应该传递的是a。
3. 最关键的,我纳闷怎么没输出,检查了下你的thread_fun才发现“for(k=2k<=512k++)”,数组越界了! 造成的结果是把n值直接给改了。。
修改版 (有warning, 最好把参数设成void *):
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <pthread.h>/*pthread_create()......*/
#include <unistd.h>
pthread_t ntid
void *thread_fun(int *p) {/*.......*/
int k
p[0] = 0
p[1] = 1
for(k=2k<512k++)
{
p[k] = p[k-1] + p[k-2]
}
return NULL
}
int main(void){
int err
int i,n
int a[512]
printf("旁森帆Please enter n:(n>=3 &n<=512) ")
scanf("%d",&n)
/*........*/
err=pthread_create(&ntid,NULL,thread_fun,(void *)a)
if (err!=0) {
fprintf(stderr, "......: %s\n", strerror(err))
exit(1)
}
pthread_join(ntid,NULL)/*...1.....*/
for(i = 0 i<=n i++){
printf("F[%d] = %d\n",i,a[i])
}
}
头文件陆唯:Winbase.hBOOL CreateProcess(
LPCTSTR lpApplicationName,
LPTSTR lpCommandLine,
早昌培LPSECURITY_ATTRIBUTES lpProcessAttributes。
迅缺LPSECURITY_ATTRIBUTES lpThreadAttributes,
BOOL bInheritHandles,
DWORD dwCreationFlags,
LPVOID lpEnvironment,
LPCTSTR lpCurrentDirectory,
LPSTARTUPINFO lpStartupInfo,
LPPROCESS_INFORMATION lpProcessInformation
)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)