C 程序有时会崩溃,而其他时间不会';T

C 程序有时会崩溃,而其他时间不会';T,c,matrix,malloc,free,C,Matrix,Malloc,Free,我试图制作一个程序,生成两个行数和列数相同的矩阵(由用户给定。矩阵上的数字也会生成),然后生成另一个矩阵,其中填充了用户给定的数字 例如,如果我要求使用3行3列的矩阵,程序有时运行良好,有时运行不正常。在任何一种情况下,程序最终都会崩溃。我试过调试,但没有任何线索。可能是编译器?这就是我所拥有的: #include <stdio.h> #include <stdlib.h> int main() { int index, i, j, random, k, l;

我试图制作一个程序,生成两个行数和列数相同的矩阵(由用户给定。矩阵上的数字也会生成),然后生成另一个矩阵,其中填充了用户给定的数字

例如,如果我要求使用3行3列的矩阵,程序有时运行良好,有时运行不正常。在任何一种情况下,程序最终都会崩溃。我试过调试,但没有任何线索。可能是编译器?这就是我所拥有的:

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

int main()
{
    int index, i, j, random, k, l;
    srand(time(NULL));
    printf("How many colums/lines?\n");
    scanf("%d", &index);
    int(*matrix1)[index]=malloc(sizeof(int[index][index]));
    if(matrix1 == NULL)
    {
        printf("Error\n");
    }

    for(i=1; i<=index; i++)
    {
        for(j=1; j<=index; j++)
        {
            random = rand()%10;
            matrix1[i][j]=random;
            printf("%d ", matrix1[i][j]);
        }
        printf("\n");

    }
    printf("\n\n");


    int(*matrix2)[index]=malloc(sizeof(int[index][index]));
    if(matrix2 == NULL)
    {
        printf("Error\n");
    }

    for(k=1; k<=index; k++)
    {
        for(l=1; l<=index; l++)
        {
            random = rand()%10;
            matrix2[k][l]=random;
            printf("%d ", matrix2[k][l]);
        }
        printf("\n");

    }

    int(*matrix3)[index]=malloc(sizeof(int[index][index]));

    printf("Input the numbers for the third matrix.\n");
    for(i=1; i<=index; i++)
    {
        for(j=1; j<=index; j++)
        {
            printf("Fill the position %d%d\n", i, j);
            scanf("%d", &matrix3[i][j]);
        }
    }

    free(matrix1);
    free(matrix2);
    free(matrix3);
    return 0;
#包括
#包括
int main()
{
int索引,i,j,random,k,l;
srand(时间(空));
printf(“多少列/行?\n”);
scanf(“%d”和索引);
int(*matrix1)[index]=malloc(sizeof(int[index][index]);
if(matrix1==NULL)
{
printf(“错误\n”);
}

对于(i=1;iDid您是否使用了调试器?它到底在哪一行崩溃?您是否知道C中的数组索引从0开始?因此有效索引是0到(num_elements-1)。在您的代码中,索引是无效的数组索引,使用它将导致缓冲区溢出。我不知道“cicles”是什么。但是(i=1;iWhat@kaylum的意思是,您需要将这些索引修复为基于0的。现在,它们将导致一个问题。实际崩溃发生在空闲期间,而不是阵列访问期间,这一事实并不意味着您“侥幸逃脱了”数组访问是否正常。我不确定我是否明白你的意思。我应该做什么:for(I=0;iDid你使用了调试器吗?它到底在哪一行崩溃了?你知道C中的数组索引是从0开始的吗?所以有效的索引是0到(num_elements-1)。在您的代码中,
索引是无效的数组索引,使用该索引将导致缓冲区溢出。我不知道“cicles”是什么。但是(i=1;iWhat@kaylum的意思是,您需要将这些索引修复为基于0的。现在,它们将导致一个问题。实际崩溃发生在空闲期间,而不是阵列访问期间,这一事实并不意味着您“侥幸逃脱了”数组访问是正常的。我不确定我是否明白你说的。我应该做什么:for(I=0;I)