我一直在尝试这段代码而且效果不佳。
void *matrix_allocate_variable (int size)
{
void *p1;
if ((p1=(int*)malloc(size))==NULL){
printf("out of memory.\n");
exit(1);
}
return p1;
}
在这里,我创建了一个调用malloc
的函数,并在出错时退出,以便我可以在我的下一个函数中使用它:
void matrix_new(int **matrices, int *row_counts, int *column_counts, char specifier)
{
int index, i;
index= (int)(specifier-'A');
scanf("%d",&row_counts[index]);
scanf("%d",&column_counts[index]);
matrices[index]= (int*)matrix__allocate_variable(sizeof(int)* (row_counts[index]*column_counts[index]);
这是我遇到问题的地方。我正在尝试让用户输入一些用于创建矩阵的输入,但是我在尝试使其工作时遇到了很多问题。有人可以帮我开始吗?
PS。有关更多详细信息,我正在functions.c
中创建函数,这是我到目前为止所做的。我有main.c
调用这些函数,以便稍后我可以添加,减去和转置,但是到目前为止我正在尝试输入数据,这是我遇到的很多麻烦。这是我main.c
我称之为函数的地方。
/* Pointer to the set of matrix registers. */
int **matrices = NULL;
/* row_counts[i] stores the number of rows in matrix i */
int *row_counts = NULL;
/* column_counts[i] stores the number of columns in matrix i */
int *column_counts = NULL;
/**********************************************************************
Skeleton code part B: suggested form for selected variable initializations
**********************************************************************/
/* Initialize the matrix set. */
matrices = (int**) matrix_allocate_variable(...);
column_counts = (int *)matrix_allocate_variable(...);
row_counts = (int *)matrix_allocate_variable(...);
char call[2];
int error = 2;
do {
printf ( "> ");
if (scanf ("%1s", call) !=1) {
fprintf (stderr, "Command not found. \n");
exit (1);
}
switch (call [0]) {
case 'A': matrix_new(matrices,row_counts,column_counts,'A');
break;
case 'B': matrix_new(matrices,row_counts,column_counts,'B');
break;
case 'C': matrix_new(matrices,row_counts,column_counts,'C');
break;
case 'D': matrix_new(matrices,row_counts,column_counts,'D');
break;
case '+': matrix_add(matrices,row_counts,column_counts);
break;
case '^': matrix_tranpose(matrices,row_counts,column_counts);
break;
case '*': matrix_multiply(matrices,row_counts,column_counts);
break;
case '$': exit (1);
default : fprintf (stderr, "Command not found. \n");
}
} while (error != 1);
return 0;
}
任何帮助都会很好,我接下来应该做的任何指示都很棒。非常感谢你们每一个人。
答案 0 :(得分:3)
嗨,这是使用malloc创建一个矩阵的示例代码。
(这应该可以让你深入了解如何创建一个矩阵数组。如果没有,请告诉我。)
#include <stdio.h>
#include <stdlib.h>
// Creates a matrix given the size of the matrix (rows * cols)
int **CreateMatrix(int rows, int cols) {
int **matrix = malloc(sizeof(int*) * rows);
int row;
for (row = 0; row < rows; row++) {
matrix[row] = malloc(sizeof(int) * cols);
}
return matrix;
}
// Take input for the matrix.
void MatrixInput(int **matrix, int rows, int cols) {
int row, col;
for (row = 0; row < rows; row++) {
for (col = 0; col < cols; col++) {
scanf("%d", &matrix[row][col]);
}
}
}
void PrintMatrix(int **matrix, int rows, int cols) {
int row, col;
for (row = 0; row< rows; row++) {
for (col = 0; col < cols; col++) {
printf("%d ", matrix[row][col]);
}
printf("\n");
}
}
int main() {
int **matrix;
int rows = 5;
int cols = 4;
matrix = CreateMatrix(rows, cols);
MatrixInput(matrix, rows, cols);
PrintMatrix(matrix, rows, cols);
}
答案 1 :(得分:0)
以下是为二维数组创建和释放内存的示例 ...
(很容易修改其他类型)
int ** Create2D(int **arr, int cols, int rows)
{
int space = cols*rows;
int y;
arr = calloc(space, sizeof(int));
for(y=0;y<cols;y++)
{
arr[y] = calloc(rows, sizeof(int));
}
return arr;
}
void free2DInt(int **arr, int cols)
{
int i;
for(i=0;i<cols; i++)
if(arr[i]) free(arr[i]);
free(arr);
}
像这样使用:
#include <ansi_c.h>
int main(void)
{
int **array=0, i, j;
array = Create2D(array, 5, 4);//get the actual row/column values from reading the file once.
for(i=0;i<5;i++)
for(j=0;j<4;j++)
array[i][j]=i*j; //example values for illustration
free2DInt(array, 5);
return 0;
}