Эта программа должна попросить пользователя ввести две матрицы и предоставить сумму из двух. Когда он скомпилирован, он работает не так, как ожидалось, я считаю, что это связано с моим использованием malloc
, если кто-то может помочь в этом, будем очень благодарны.Использование Malloc для добавления двух массивов HW в C
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
/*Here we declare and define our function 'matrices', which prompts the
user for Matrix A and Matrix B and stores their values.*/
int matrices(int rows, int cols){
int i;
int** matrixA = malloc(rows * sizeof(**matrixA));
int** matrixB = malloc(rows * sizeof(**matrixB));
printf("Enter Matrix A\n");
for (i = 0; i < rows; i++){
matrixA[i] = (int *) malloc(cols * sizeof(int));
scanf("%d", matrixA[i]);
}
printf("Enter Matrix B\n");
for (i = 0; i < rows; i++){
matrixB[i] = (int *) malloc(cols * sizeof(int));
scanf("%d", matrixB[i]);
}
return 0;
}
/*Here we declare and define our function 'sum', which sums Matrix A and
Matrix B and provides us with the summation of the two in the
variable 'matrixSum'*/
int sum(int rows, int cols){
int i;
int** matrixA = malloc(rows * sizeof(**matrixA));
int** matrixB = malloc(rows * sizeof(**matrixB));
int** matrixSum = malloc(rows * sizeof(**matrixSum));
printf("A + B =\n");
for (i = 0; i < rows; i++) {
matrixA[i] = (int *) malloc(cols * sizeof(int));
matrixB[i] = (int *) malloc(cols * sizeof(int));
matrixSum[i] = (int *) malloc(cols * sizeof(int));
*matrixSum[i] = *matrixA[i] + *matrixB[i];
printf("%d\t", *matrixSum[i]);
printf("\n");
}
return 0;
}
/*Here we declare and define our main function which works to prompt the user for the number of rows and columns and calls the previously declared functions. */
int main(void){
int rows, cols;
int** matrixA = malloc(rows * sizeof(**matrixA));
int** matrixB = malloc(rows * sizeof(**matrixB));
int** matrixSum = malloc(rows * sizeof(**matrixSum));
printf("Please enter the number of rows: ");
scanf("%d", &rows);
printf("Please enter the number of columns: ");
scanf("%d", &cols);
matrices(rows, cols);
sum(rows, cols);
free(matrixA);
free(matrixB);
free(matrixSum);
return 0;
}
Я думаю, 'int ** matrixA = malloc (rows * sizeof (** matrixA));' abd другие строки, подобные этому, должны быть похожими на 'int ** matrixA = malloc (rows * sizeof (* matrixA)); , Кроме того, явное выражение результата 'malloc()' явно считается [не хорошим] (http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc). – MikeCAT
'scanf ("% d ", matrixA [i]);' ОК, но выглядит странно. Он будет считывать данные только для первого элемента массива. – MikeCAT
как еще я мог бы пойти на часть scanf? –