具有系统调用的矩阵行列式

问题描述

所以,这是我的程序,它使用系统调用来计算矩阵行列式,一点也不好,但是,麻烦的是,当我将大于8的数字输入矩阵维时,它以某种方式崩溃并且我无法弄清楚为什么它不断发生。请给我一些想法。

任务是使用多线程计算行列式。也许问题是我超出了最大线程数? valgrind说

使用--max-threads = INT指定更多线程 并重新运行valgrind

valgrind:“不可能”发生: 最大线程数太低

使用gcc -g -pthread

进行编译
#include <stdlib.h>
#include <pthread.h>
#include <math.h>
#include <time.h>
#include <malloc.h>

pthread_mutex_t mutex;

typedef struct {
    int **matrix;
    int size;
} T_MS;


void* determinant(void *npt) {
    T_MS* tmp = (T_MS*) npt;
    int i,j;
    double det = 0;
    pthread_t *array = malloc(sizeof(pthread_t) * tmp->size);
    T_MS   *mtarr = malloc(sizeof(T_MS)   * tmp->size);

    if (tmp->size == 1) {
        det = tmp->matrix[0][0];
    } else if (tmp->size == 2) {
        det = tmp->matrix[0][0] * tmp->matrix[1][1] - tmp->matrix[0][1] * tmp->matrix[1][0];
    } else {

        for (i = 0; i < tmp->size; ++i) {
            mtarr[i].matrix = (int **)malloc(sizeof(int *) * tmp->size);
            mtarr[i].size = tmp->size - 1;

            for (j = 0; j < tmp->size - 1; ++j) {
                if (j < i)
                    mtarr[i].matrix[j] = tmp->matrix[j];
                else
                    mtarr[i].matrix[j] = tmp->matrix[j + 1];
            }

            pthread_create(&array[i],NULL,determinant,mtarr + i);

        }

        for (i = 0; i < tmp->size; ++i) {
            void *res;
            for (j = 0; j < tmp->size - 1; ++j) {
            }
            pthread_join(array[i],&res);
            double x = *(double *)&res;
            det += (-1 + 2 * !(i % 2)) * x * tmp->matrix[i][tmp->size - 1];


            double answer = *(double*)&det;
            free(mtarr[i].matrix);
        }


    }
    free(mtarr);
    free(array);

    void* ans = *(void **)&det;
    return ans;
}


int main(int argc,char const *argv[]) {
    srand(time(NULL));
    int **matrix;
    int n = 0;
    int a;

    pthread_t tid;
    pthread_attr_t attr;
    pthread_attr_init(&attr);

    printf("Insert the demention of matrix:\n");
    scanf("%d",&n);

    matrix = (int**)malloc(n * sizeof(int*));

    for (int i=0; i<n; ++i)
        matrix[i] = (int*)malloc(n * sizeof(int));


    printf("Insert matrix:\n");


    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < n; ++j) {
            matrix[i][j]=rand()%15;
            //matrix[i][j] = i;
        }
    }

    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < n; ++j) {
            printf("%d ",matrix[i][j]);
        }
        printf("\n");
    }


    T_MS* npt = (T_MS*)malloc(sizeof(T_MS));
    npt->matrix = matrix;
    npt->size = n;

    void *det;
    pthread_mutex_init(&mutex,NULL);
    pthread_create(&tid,npt);
    pthread_join(tid,&det);

    double answer = *(double*)&det;
    printf("Det is: %f\n",answer);

    for (int i = 0; i < n; ++i)
        free(matrix[i]);
    free(matrix);
    free(npt);

    return 0;
} ```

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)