Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
返回的进程-1073741819(0xC0000005)_C_Matrix - Fatal编程技术网

返回的进程-1073741819(0xC0000005)

返回的进程-1073741819(0xC0000005),c,matrix,C,Matrix,我是C语言的初学者。我遇到了这个错误,我想不出如何修复它。我正在使用代码:blocks和gnugcc编译器。这是一个简单的矩阵,必须使用Shaker排序进行排序。我不能继续下去,直到我使这个工作。请帮帮我,伙计们 #include <stdio.h> #include <stdlib.h> #include <time.h> int main() { srand(time(NULL)); int r=11, s=23, m[r][s], i,

我是C语言的初学者。我遇到了这个错误,我想不出如何修复它。我正在使用代码:blocks和gnugcc编译器。这是一个简单的矩阵,必须使用Shaker排序进行排序。我不能继续下去,直到我使这个工作。请帮帮我,伙计们

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

int main()
{
    srand(time(NULL));
    int r=11, s=23, m[r][s], i, j, pom;

    printf("Generated matrix:\n\n");
    for(i=0;i<r;i++)
    {
        for(j=0;j<s;j++)
        {
            m[i][j]=rand()%100;
            printf("%3d", m[i][j]);
        }
        printf("\n");
    }

    i=0;
    j=0;
    do{
        if(m[i][j]>=m[i+1][j+1])
        {
            pom=m[i+1][j+1];
            m[i+1][j+1]=m[i][j];
            m[i][j]=pom;
        }

        if(j==s)
        {
            i++;
            j=0;
        }

        if(i==r&&j==s)
            break;
        j++;
    }while(1);

    for(i=0;i<r;i++)
    {
        for(j=0;j<s;j++)
        {
            m[i][j]=rand()%100;
            printf("%3d", m[i][j]);
        }
        printf("\n");
    }

    printf("\n\n");
    return 0;
}
#包括
#包括
#包括
int main()
{
srand(时间(空));
int r=11,s=23,m[r][s],i,j,pom;
printf(“生成的矩阵:\n\n”);

对于(i=0;i而言,在第25行仍然包含基本错误:

// for(j=0;j=s;j++){
应该是:

for(j=0;j<s;j++){
仅更正该错误,将提供以下输出,其中矩阵将按其应有的方式更改。但是,您的排序仍需要额外的工作。以下是一个输出示例:

输出:

$ ./bin/mtrxerr
Generated matrix:

 69 41 30 55 44 78 67 30 81 14 92 62 21 91 66 21 28 98 69 30 90 43 57
 12 35 85 21 49 45 31 40 14 24 70 22 68  0 89 50 81 56 42 44 77 33 62
 98 14 61 19 96  3 14 54 15 50 91 88 51 36 71 91 50 95 62 24 15 62 66
 66 96 22  8 40 51 94 54  1  8 67 21  4 70 35 10 37 85  1 78 36 37 49
 80 40 97 42 64 12 56 30 78 52  4 39 44 55 85 51 57 93 18 78 49 41 65
 60 78 51 13 56 39 51 58 19 91 55 13  7 67 22 90 98 74 94 89 71  2 74
 22 59 19 92 89 68 33 54 80 12 57 94 20 49 97 78 20 40 33 34 47 53  8
 89  3 82 84 92  5 38 66 79 97 85 72 38  5 57 44 38 21  2 84 42  3 81
 72 23 21  6  9 20 11 17 10 14 52 46  6  9 84 24 89 33 61 13 71 66 70
 67 56 92 69 40 86 24 21 58  0 94 16 61 15 27 79 77 93 83 23 99 92 59
 75 33 92 36 46 15 55 69 82 11 13  4 52 99 28 73 57 80 68 26 42 35 53


 41 30 55 44 69 67 30 78 14 81 62 21 91 66 21 28 92 69 30 90 43 57 12
 98 35 85 21 49 45 31 40 14 24 70 22 68  0 89 50 81 56 42 44 77 33 62
 98 14 61 19 96  3 14 54 15 50 91 88 51 36 71 91 50 95 62 24 15 62 66
 66 96 22  8 40 51 94 54  1  8 67 21  4 70 35 10 37 85  1 78 36 37 49
 80 40 97 42 64 12 56 30 78 52  4 39 44 55 85 51 57 93 18 78 49 41 65
 60 78 51 13 56 39 51 58 19 91 55 13  7 67 22 90 98 74 94 89 71  2 74
 22 59 19 92 89 68 33 54 80 12 57 94 20 49 97 78 20 40 33 34 47 53  8
 89  3 82 84 92  5 38 66 79 97 85 72 38  5 57 44 38 21  2 84 42  3 81
 72 23 21  6  9 20 11 17 10 14 52 46  6  9 84 24 89 33 61 13 71 66 70
 67 56 92 69 40 86 24 21 58  0 94 16 61 15 27 79 77 93 83 23 99 92 59
 75 33 92 36 46 15 55 69 82 11 13  4 52 99 28 73 57 80 68 26 42 35 53
评论中建议您,排序算法将需要嵌套循环。请查看您的排序例程并更正逻辑。web上的许多地方都有该例程的示例。另一个示例是:


修复排序例程后,如果仍有问题,请发表评论,我们将很乐意提供其他帮助。

man 3 exit
man 2 exit
结果是位掩码,只有较低的位构成实际退出()值,其余的由进程退出的原因组成。顺便说一句:在“=”运算符周围使用一些空格。这是访问冲突的错误代码。在do-while循环中,仔细查看当
i==r&&j==s
时会发生什么。提示:如果先点击第二个
if
,这会对
i
j
产生影响。…从排序逻辑判断,似乎完全可以想象您退出的访问冲突是准确的。使用集成的
gdb
会有所帮助,尽管这并不比在纸上遍历您的算法并记住维数N的数组在0..N-1之间是不灵活的。如果您对
If(j==s)的测试
曾经是真的,这意味着您已经违反了索引前提,并且您的程序格式不正确(事实上是这样)。
j
在do-while循环结束时递增,在下一次迭代中使用之前未进行检查。
i
的唯一检查是当
j
也处于极限时,使用
if(i==r&&j==s)break;
。这永远不会发生,因为当你增加
i
时,你会重置
j
。最后,你的矩阵操作会因其初始随机性的重复而失败。在你的新编辑中,交换循环现在是
for(j=0;j=s;j++)
在执行循环之前测试结束条件
j=s
。但是
j=s
不是一个测试,而是一个赋值,它不仅将
j
设置在矩阵数组的范围之外,而且对循环的计算结果为
true
。每次迭代,
j
都超出矩阵的范围,并且
i
都递增直到循环只在
中断
被点击时结束。我可以说你需要
for(j=0;jt谢谢你,但我现在真的很绝望。我意识到我们只能使用一个外循环和一个内循环。而且我们只能使用一个数组。解决这个任务我真的有很大的困难。我接受任何建议。
gcc -Wall -Wextra -o bin/mtrxerr mtrxerr.c
$ ./bin/mtrxerr
Generated matrix:

 69 41 30 55 44 78 67 30 81 14 92 62 21 91 66 21 28 98 69 30 90 43 57
 12 35 85 21 49 45 31 40 14 24 70 22 68  0 89 50 81 56 42 44 77 33 62
 98 14 61 19 96  3 14 54 15 50 91 88 51 36 71 91 50 95 62 24 15 62 66
 66 96 22  8 40 51 94 54  1  8 67 21  4 70 35 10 37 85  1 78 36 37 49
 80 40 97 42 64 12 56 30 78 52  4 39 44 55 85 51 57 93 18 78 49 41 65
 60 78 51 13 56 39 51 58 19 91 55 13  7 67 22 90 98 74 94 89 71  2 74
 22 59 19 92 89 68 33 54 80 12 57 94 20 49 97 78 20 40 33 34 47 53  8
 89  3 82 84 92  5 38 66 79 97 85 72 38  5 57 44 38 21  2 84 42  3 81
 72 23 21  6  9 20 11 17 10 14 52 46  6  9 84 24 89 33 61 13 71 66 70
 67 56 92 69 40 86 24 21 58  0 94 16 61 15 27 79 77 93 83 23 99 92 59
 75 33 92 36 46 15 55 69 82 11 13  4 52 99 28 73 57 80 68 26 42 35 53


 41 30 55 44 69 67 30 78 14 81 62 21 91 66 21 28 92 69 30 90 43 57 12
 98 35 85 21 49 45 31 40 14 24 70 22 68  0 89 50 81 56 42 44 77 33 62
 98 14 61 19 96  3 14 54 15 50 91 88 51 36 71 91 50 95 62 24 15 62 66
 66 96 22  8 40 51 94 54  1  8 67 21  4 70 35 10 37 85  1 78 36 37 49
 80 40 97 42 64 12 56 30 78 52  4 39 44 55 85 51 57 93 18 78 49 41 65
 60 78 51 13 56 39 51 58 19 91 55 13  7 67 22 90 98 74 94 89 71  2 74
 22 59 19 92 89 68 33 54 80 12 57 94 20 49 97 78 20 40 33 34 47 53  8
 89  3 82 84 92  5 38 66 79 97 85 72 38  5 57 44 38 21  2 84 42  3 81
 72 23 21  6  9 20 11 17 10 14 52 46  6  9 84 24 89 33 61 13 71 66 70
 67 56 92 69 40 86 24 21 58  0 94 16 61 15 27 79 77 93 83 23 99 92 59
 75 33 92 36 46 15 55 69 82 11 13  4 52 99 28 73 57 80 68 26 42 35 53