segmentation fault

yeshaoqiang 2011-10-29 07:59:53
请问各位大牛,为什么我的代码运行后会出现这样的错误呢?
我是在linux下编译运行的,用的是gcc编译
这是我的代码:
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>

#define M 5
#define K 4
#define N 3
int A[M][K],B[K][N],C[M][N];

struct mypar
{
int row;
int line;
};

void* Times(struct mypar arg)
{
//struct mypar * newpar = (struct mypar *)arg;
int row,line;
int i;
row = arg.row;
line = arg.line;
C[row][line] = 0;
for(i = 0;i < K;i++)
C[row][line] += A[row][i]*B[i][line];
}

void main()
{
int i,j;
for(i = 0;i < M;i++)
for(j = 0;j < K;j++)
scanf("%d",&A[i][j]);
for(i = 0;i < K;i++)
for(j = 0;j < N;j++)
scanf("%d",&B[i][j]);
pthread_t id[M][N];
for(i = 0;i < M;i++)
for(j = 0;j < N;j++)
{
struct mypar par;
par.row = i;
par.line = j;
pthread_create(&id[i][j],NULL,(void*)Times(par),NULL);
}
for(i = 0;i < M;i++)
for(j = 0;j < N;j++)
pthread_join(id[i][j],NULL);
for(i = 0;i < M;i++)
for(j = 0;j < N;j++)
{
if(j == N-1)
printf("%d\n",C[i][j]);
else
printf("%d ",C[i][j]);
}

}

我输入了
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1

1 1 1
1 1 1
1 1 1
1 1 1
运行后就显示段错误了。
...全文
85 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
yeshaoqiang 2011-11-01
  • 打赏
  • 举报
回复
编译能通过的,是我传参错误,应该改成pthread_create(&id[i][j],NULL, Times,&par);//
谢谢大萝卜,哈哈
AnYidan 2011-10-29
  • 打赏
  • 举报
回复
段错误一般是非法使用内存

使用没有初始化的指针,数组越界是最常见的
honbo 2011-10-29
  • 打赏
  • 举报
回复
你这个能编译通过?
我改了一下,在cygwin下可以运行。
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>

#define M 5
#define K 4
#define N 3
int A[M][K],B[K][N],C[M][N];

struct mypar
{
int row;
int line;
};

void* Times(void* arg1) //
{
struct mypar * arg = (struct mypar *)arg1;//
int row,line;
int i;
row = arg->row;//
line = arg->line;//
C[row][line] = 0;
for(i = 0;i < K;i++)
C[row][line] += A[row][i]*B[i][line];
}

int main(void)
{
int i,j;
for(i = 0;i < M;i++)
for(j = 0;j < K;j++)
scanf("%d",&A[i][j]);
for(i = 0;i < K;i++)
for(j = 0;j < N;j++)
scanf("%d",&B[i][j]);
pthread_t id[M][N];
for(i = 0;i < M;i++)
for(j = 0;j < N;j++)
{
struct mypar par;
par.row = i;
par.line = j;
pthread_create(&id[i][j],NULL, Times,&par);//
}
for(i = 0;i < M;i++)
for(j = 0;j < N;j++)
pthread_join(id[i][j],NULL);
for(i = 0;i < M;i++)
for(j = 0;j < N;j++)
{
if(j == N-1)
printf("%d\n",C[i][j]);
else
printf("%d ",C[i][j]);
}
}

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧