面试题答案
一键面试#include <stdio.h>
#include <stdlib.h>
int** addMatrices(int** matrix1, int** matrix2, int rows, int cols) {
// 分配结果矩阵的内存
int** result = (int**)malloc(rows * sizeof(int*));
if (result == NULL) {
fprintf(stderr, "内存分配失败\n");
return NULL;
}
for (int i = 0; i < rows; i++) {
result[i] = (int*)malloc(cols * sizeof(int));
if (result[i] == NULL) {
// 如果某一行分配失败,释放之前已分配的行
for (int j = 0; j < i; j++) {
free(result[j]);
}
free(result);
fprintf(stderr, "内存分配失败\n");
return NULL;
}
}
// 矩阵相加
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
result[i][j] = matrix1[i][j] + matrix2[i][j];
}
}
return result;
}
// 释放矩阵内存的函数
void freeMatrix(int** matrix, int rows) {
for (int i = 0; i < rows; i++) {
free(matrix[i]);
}
free(matrix);
}
你可以使用以下方式调用这个函数:
int main() {
int rows = 3;
int cols = 3;
// 分配matrix1的内存
int** matrix1 = (int**)malloc(rows * sizeof(int*));
for (int i = 0; i < rows; i++) {
matrix1[i] = (int*)malloc(cols * sizeof(int));
}
// 初始化matrix1
matrix1[0][0] = 1; matrix1[0][1] = 2; matrix1[0][2] = 3;
matrix1[1][0] = 4; matrix1[1][1] = 5; matrix1[1][2] = 6;
matrix1[2][0] = 7; matrix1[2][1] = 8; matrix1[2][2] = 9;
// 分配matrix2的内存
int** matrix2 = (int**)malloc(rows * sizeof(int*));
for (int i = 0; i < rows; i++) {
matrix2[i] = (int*)malloc(cols * sizeof(int));
}
// 初始化matrix2
matrix2[0][0] = 1; matrix2[0][1] = 2; matrix2[0][2] = 3;
matrix2[1][0] = 4; matrix2[1][1] = 5; matrix2[1][2] = 6;
matrix2[2][0] = 7; matrix2[2][1] = 8; matrix2[2][2] = 9;
int** result = addMatrices(matrix1, matrix2, rows, cols);
if (result != NULL) {
// 输出结果矩阵
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
printf("%d ", result[i][j]);
}
printf("\n");
}
freeMatrix(result, rows);
}
freeMatrix(matrix1, rows);
freeMatrix(matrix2, rows);
return 0;
}
在上述代码中:
addMatrices
函数实现了矩阵相加的功能。首先为结果矩阵分配内存,如果内存分配失败,函数会进行相应的错误处理并返回NULL
。然后通过双重循环逐元素相加两个矩阵,最后返回结果矩阵。freeMatrix
函数用于释放矩阵占用的内存,避免内存泄漏。- 在
main
函数中,初始化两个矩阵,调用addMatrices
函数进行矩阵相加,并输出结果矩阵,最后释放所有分配的内存。