将2d数组C代码转换为malloc



我制作了一个程序,将两个矩阵相加,并显示它们的和,最大维数为100。

/* This program asks the user for 2 matrices called A and B, as integers,
   and displays their sum, C. The max dimension of each matrix is 100. */
#include <stdio.h>
// Construct function
void construct()
{
   int m, n, i, j;      // Variables
   int first[100][100], second[100][100], sum[100][100]; // Matrices variables
   printf("Please enter the number of rows: ");
   scanf("%d", &m);
   printf("Please enter the number of columns: ");
   scanf("%d", &n);
   // User enters m x n amount whole numbers for the Matrix A
   printf("Enter Matrix An");
   for (i = 0; i < m; i++)
      for (j = 0; j < n; j++)
         scanf("%d", &first[i][j]);
   // User enters m x n amount whole numbers for the Matrix B
   printf("Enter Matrix Bn");
   for (i = 0; i < m; i++)
      for (j = 0; j < n; j++)
            scanf("%d", &second[i][j]);
   // Adds the sum of Matrix A and Matrix B
   for (i = 0; i < m; i++)
      for (j = 0; j < n; j++)
         sum[i][j] = first[i][j] + second[i][j];
   // Display the sum of Matrix A and Matrix B
   printf("A + B =n");
   for (i = 0; i < m; i++)
   {
      for (j = 0; j < n; j++)
         printf("%d ", sum[i][j]);
      printf("n"); // Prints new line
   }
   return ;
}
// Main Function
int main()
{
    construct(); // Calls construct function
    return 0;
}

现在我需要改变它,这样就没有每个矩阵的最大大小。所以我需要使用malloc来创建我的数组。所以我不能使用int A[rows][cols]。这就是我将数组隐藏到malloc的方法。它进行编译,但在我输入所有整数后崩溃。需要帮助。

/* This program asks the user for 2 matrices called A and B, as integers,
   and displays their sum, C. The max dimension of each matrix is 100. */
#include <stdio.h>
#include <stdlib.h>
// Construct function
void construct()
{
   int m, n, i, j;      // Variables
   int *first = NULL;
   int *second = NULL;
   int *sum = NULL;    // Matrices variables
   printf("Please enter the number of rows: ");
   scanf("%d", &m);
   printf("Please enter the number of columns: ");
   scanf("%d", &n);
   first = (int*)malloc(m * sizeof(int));
   second = (int*)malloc(n * sizeof(int));
   sum = (int*)malloc(m * n * sizeof(int));

   // User enters m x n amount whole numbers for the Matrix A
   printf("Enter Matrix An");
   for (i = 0; i < m; i++)
      for (j = 0; j < n; j++)
         scanf("%d", &first);
   // User enters m x n amount whole numbers for the Matrix B
   printf("Enter Matrix Bn");
   for (i = 0; i < m; i++)
      for (j = 0; j < n; j++)
            scanf("%d", &second);
   // Adds the sum of Matrix A and Matrix B
   for (i = 0; i < m; i++)
      for (j = 0; j < n; j++)
         sum = *first + *second;
   // Display the sum of Matrix A and Matrix B
   printf("A + B =n");
   for (i = 0; i < m; i++)
   {
      for (j = 0; j < n; j++)
         printf("%d ", sum);
      printf("n");
   }
   return ;
}
// Main Function
int main()
{
    construct(); // Calls construct function
    return 0;
}

首先,您不需要使用malloc。只需将数组定义移动到输入mn:之后即可

int first[m][n];
printf("Enter Matrix An");
for (i = 0; i < m; i++)
    for (j = 0; j < n; j++)
        scanf("%d", &first[i][j]);

并且对于CCD_ 3和CCD_。

如果矩阵可能大于100x100,则最好使用malloc来避免堆栈溢出的风险;这样做的方法是:

int (*first)[n] = malloc(m * sizeof *first);
printf("Enter Matrix An");
// etc.

最后是free(first);。无需进行其他更改。


在尝试使用malloc时,您没有分配足够的空间,也没有将scanf写入您分配的空间(相反,您覆盖了指向已分配空间的指针)。

相关内容

  • 没有找到相关文章

最新更新