[英]Segmentation Fault(Core Dumped) Code shows this error
I've been trying to multiply Multidimensional arrays using Threads. 我一直在尝试使用线程来乘以多维数组。 While the code executes properly, I keep getting this particular error 在代码正确执行的同时,我不断收到此特定错误
#include<stdio.h>
#include<stdlib.h>
#include<pthread.h>
#include<malloc.h>
#include<unistd.h>
#include<fcntl.h>
#include<errno.h>
#define R_FLAGS O_RDONLY
int arraySize;
int **oarray;
int **resultarray; /*the two multidimensional arrays declared*/
void *multiply(void *arg);
/*The function used to showcase Mutliplication*/
int** DynamicAllocate(int Size) {
int i;
int **array;
array = malloc(Size * sizeof(int *));
if(array = NULL){
fprintf(stderr,"No Memory\n");
return;
}
for(i=0;i<Size;i++){
array[i] = malloc(Size * sizeof(int));
/*using the same no of rows for the columns as instructed*/
if(array[i] == NULL){
fprintf(stderr,"No Memory\n");
return;
}
}
return array;
}
void *multiply(void *arg) {
int i,j,*k,v,Sum=0;
k=(int *)arg;
v=(int)k;
for(i=0;i<arraySize;i++){
for(j=0;j<arraySize;j++){
Sum= Sum + oarray[v][j]*oarray[j][i];
}
Sum = resultarray[v][i];
Sum=0;
}
}
int main(int argc, char *argv[]){
int error,*join;
char nrows,*intarray;
int row,i,j,value=0;
pthread_t tid;
if((error = open("File",O_RDONLY))==-1){
perror("Unable to Open File");
}
read(error,&nrows,1);
row = atoi(&nrows);
arraySize = row;
oarray = DynamicAllocate(row);
resultarray = DynamicAllocate(row);
intarray = malloc(1024); /*read until given file ends*/
read(error,intarray,1024);
printf("****Assignment # 3****\n");
printf("****By:Hammad Faisal****\n");
printf("****DDP-SP12-BCS-026****\n\n");
/*temporary array that is being used for storage and multiplication*/
for(i=0;i<row;i++){
for(j=0;j<row;j++){
oarray[i][j]=atoi(&intarray[value]);
value+=2;
}
}
/*using for loop to attach thread to each row allocated*/
for(i=0;i<row;i++){
join = (int *)i;
pthread_create(&tid,NULL,multiply,join);
pthread_join(tid,NULL);
}
/*display the resultant matrix*/
for(i=0;i<row;i++){
for(j=0;j<row;j++){
printf("%d\t",resultarray[i][j]);
}
printf("\n");
}
return 0;
}
The above mentioned code compiles perfectly on Ubuntu but the Segmentation fault is the problem. 上面提到的代码可以在Ubuntu上完美地编译,但是分段错误是问题所在。 Every time I try to execute the code it gives the same error over and over again although from what I have read the code should execute fine. 每次我尝试执行代码时,都会反复给出相同的错误,尽管从我阅读的内容来看,代码应该可以很好地执行。 I'm new Linux and I would greatly appreciate any help. 我是新Linux,不胜感激。
First of all, you are using =
to compare, as: 首先,您使用=
进行比较,如下所示:
if(array = NULL){
fprintf(stderr,"No Memory\n");
return;
}
It should be: 它应该是:
if(array == NULL){
fprintf(stderr,"No Memory\n");
return;
}
Also, this is wrong: 另外,这是错误的:
int i,j,*k,v,Sum=0;
k=(int *)arg;
v=(int)k;
v
is not a pointer as k
and many other errors... v
不是像k
和其他许多错误的指针...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.