繁体   English   中英

分段错误(核心转储)代码显示此错误

[英]Segmentation Fault(Core Dumped) Code shows this 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;
}

上面提到的代码可以在Ubuntu上完美地编译,但是分段错误是问题所在。 每次我尝试执行代码时,都会反复给出相同的错误,尽管从我阅读的内容来看,代码应该可以很好地执行。 我是新Linux,不胜感激。

首先,您使用=进行比较,如下所示:

if(array = NULL){
    fprintf(stderr,"No Memory\n");
    return;
}

它应该是:

if(array == NULL){
    fprintf(stderr,"No Memory\n");
    return;
}

另外,这是错误的:

int i,j,*k,v,Sum=0;

k=(int *)arg;
v=(int)k;

v不是像k和其他许多错误的指针...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM