在 C 中将字符串文字作为参数传递时出现分段错误

高塔姆·罗摩克里希南

我试图编写一个程序来使用 C 中的 OpenMP 执行矩阵乘法。每当我尝试将字符串文字作为参数传递给函数时,我都会面临分段错误错误。

#include<stdio.h>
#include<time.h>
#include<omp.h>

struct matrix{
    int r;
    int c;
    int mat[1000][1000];
};

void read_matrix(char* fname, struct matrix* m){
    FILE *fp;
    fp = fopen(fname,"r");

    fscanf(fp, "%d %d",&m->r,&m->c);
    for(int i=0;i<m->r;i++){
        for(int j=0;j<m->c;j++){
            fscanf(fp, "%d", &m->mat[i][j]);
        }
    }
    fclose(fp);
}

void write_matrix(char* fname, struct matrix m){
    FILE *fp;
    fp = fopen(fname,"w");
    fprintf(fp,"%d %d\n",m.r,m.c);
    for(int i=0;i<m.r;i++){
        for(int j=0;j<m.c;j++){
            fprintf(fp,"%d\n",m.mat[i][j]);
        }
    }
    fclose(fp);
}

void main(){
    struct matrix m1;
    struct matrix m2;
    struct matrix res;
    read_matrix("m1",&m1);
    read_matrix("m2",&m2);
    int r1 = m1.r;
    int c1 = m1.c;
    int c2 = m2.c;
    res.r = r1;
    res.c = c2;
    for(int i=0;i<r1;i++){
        for(int j=0;j<c2;j++){
            res.mat[i][j] = 0;
        }
    }
    #pragma omp parallel
    {
        #pragma omp for
        for(int i = 0; i < r1; i++){
            for(int j = 0; j < c2; j++){
                for(int k = 0; k < c1; k++){
                    #pragma omp atomic update
                    res.mat[i][j] += m1.mat[i][k]*m2.mat[k][j];
                }
            }
        }
    }
    write_matrix("res",res);

}

代码Segmentation fault (core dumped)在运行时显示在 GDB 上运行时,它显示Program received signal SIGSEGV, Segmentation fault. 0x0000000000400ad9 in main () at mm.c:40 40 read_matrix("m1",&m1); 在第一次 read_matrix() 调用之前我添加了一个 printf 语句printf("check\n"); printf 调用现在开始抛出分段错误。我假设传递字符串文字是错误的原因。代码可能有什么问题?

阿夫申

在第一次read_matrix()调用之前,我添加了一个 printf 语句printf("check\n");printf 调用现在开始抛出一个分段错误。

我认为这可能是因为您struct matrix在堆栈上分配每个矩阵大约 4MB,所以堆栈上有 12MB。我猜它会创建站点(堆栈溢出)。

尝试对矩阵使用静态变量或动态分配它们。它可能会解决您的问题。如果没有,永远不要在堆栈上分配 12MB 的结构......

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C分割字符串时出现分段错误

来自分类Dev

在C语言的字符串中打印字符时出现分段错误

来自分类Dev

将 unicode 替换为 C++ 字符串中的空格时出现分段错误错误

来自分类Dev

尝试在 C++ 中将字符串转换为双精度时遇到分段错误

来自分类Dev

在Ada中访问C字符串时出现分段错误

来自分类Dev

访问由C中的函数修改的字符串数组时出现分段错误

来自分类Dev

C编程-处理字符串数组时出现分段错误

来自分类Dev

更改数组中的 A 字符串时出现 C 分段错误

来自分类Dev

从C ++中的函数返回字符串时出现分段错误

来自分类Dev

C 语言中通过 fgets() 比较红色字符串的 \n 时出现分段错误

来自分类Dev

将字符串分配给 C 中的结构变量时出现分段错误

来自分类Dev

使用 ffi 将 lua 字符串转换为 C 字符串时出现分段错误

来自分类Dev

如何在C ++中将字符串的动态二维数组作为参数传递

来自分类Dev

如何在C中将字符串作为参数传递给线程

来自分类Dev

在C#中的SQL查询中将字符串数组作为参数传递

来自分类Dev

如何使用C#在Python中将字符串作为命令行参数传递

来自分类Dev

在C ++中将字符与字符串的组成部分进行比较时出现错误

来自分类Dev

在 C++ 中将字符串附加到 const char* 时出现编译时错误?

来自分类Dev

使用strsep / strdup将C字符串转换为结构变量时出现C分段错误

来自分类Dev

c ++ _beginthread 不能将字符串作为参数传递

来自分类Dev

当我们使用winapis将字符串作为参数传递时,如何将c#字符串转换为c ++字符串

来自分类Dev

执行与字符串相关的C程序时出现分段错误

来自分类Dev

使用辅助指针操作 c 字符串后出现分段错误

来自分类Dev

Node-ffi绑定到以NULL结尾的C字符串数组,但出现“分段错误:11”

来自分类Dev

在 Linux Ubuntu 中使用 g++ 出现分段错误,但在 Windows 中使用 g++/MingW 出现分段错误,在 C++ 中打印字符字符串时

来自分类Dev

C中的分段错误(生成字符串,我检查重复项时发生错误)

来自分类Dev

在C中将数组作为参数传递时出现意外结果?

来自分类Dev

为什么在c ++中尝试在Visual Studio中将字符串分配给istringstream对象时出现错误?

来自分类Dev

在C ++ dll中将C#字符串作为'Char *'传递

Related 相关文章

  1. 1

    C分割字符串时出现分段错误

  2. 2

    在C语言的字符串中打印字符时出现分段错误

  3. 3

    将 unicode 替换为 C++ 字符串中的空格时出现分段错误错误

  4. 4

    尝试在 C++ 中将字符串转换为双精度时遇到分段错误

  5. 5

    在Ada中访问C字符串时出现分段错误

  6. 6

    访问由C中的函数修改的字符串数组时出现分段错误

  7. 7

    C编程-处理字符串数组时出现分段错误

  8. 8

    更改数组中的 A 字符串时出现 C 分段错误

  9. 9

    从C ++中的函数返回字符串时出现分段错误

  10. 10

    C 语言中通过 fgets() 比较红色字符串的 \n 时出现分段错误

  11. 11

    将字符串分配给 C 中的结构变量时出现分段错误

  12. 12

    使用 ffi 将 lua 字符串转换为 C 字符串时出现分段错误

  13. 13

    如何在C ++中将字符串的动态二维数组作为参数传递

  14. 14

    如何在C中将字符串作为参数传递给线程

  15. 15

    在C#中的SQL查询中将字符串数组作为参数传递

  16. 16

    如何使用C#在Python中将字符串作为命令行参数传递

  17. 17

    在C ++中将字符与字符串的组成部分进行比较时出现错误

  18. 18

    在 C++ 中将字符串附加到 const char* 时出现编译时错误?

  19. 19

    使用strsep / strdup将C字符串转换为结构变量时出现C分段错误

  20. 20

    c ++ _beginthread 不能将字符串作为参数传递

  21. 21

    当我们使用winapis将字符串作为参数传递时,如何将c#字符串转换为c ++字符串

  22. 22

    执行与字符串相关的C程序时出现分段错误

  23. 23

    使用辅助指针操作 c 字符串后出现分段错误

  24. 24

    Node-ffi绑定到以NULL结尾的C字符串数组,但出现“分段错误:11”

  25. 25

    在 Linux Ubuntu 中使用 g++ 出现分段错误,但在 Windows 中使用 g++/MingW 出现分段错误,在 C++ 中打印字符字符串时

  26. 26

    C中的分段错误(生成字符串,我检查重复项时发生错误)

  27. 27

    在C中将数组作为参数传递时出现意外结果?

  28. 28

    为什么在c ++中尝试在Visual Studio中将字符串分配给istringstream对象时出现错误?

  29. 29

    在C ++ dll中将C#字符串作为'Char *'传递

热门标签

归档