【发布时间】:2020-09-10 04:03:37
【问题描述】:
我正在尝试执行以下操作:
• 从用户那里接收 3 个整数:size1、size2、size3。
• 创建一个 size1 * size2 矩阵和一个 size2 * size3 矩阵。
• 将 2 个矩阵相乘。
• 打印结果矩阵。
• 释放所有动态内存。
BUT 在输入两个矩阵之后,我希望程序显示矩阵的乘法,但它会在 FreeMatrix 函数中导致断点,并如下所示: 在 Project8.exe 中的 0x0F82AC1D (ucrtbased.dll) 处引发异常:0xC0000005:访问冲突读取位置 0xCCCCCCC4。
代码:
#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include <stdio.h>
void BuildMatrix(int*** pMat, int row, int col);
void FreeMatrix(int*** matrix, int row);
void PrintMatrix(int** pMat, int row, int col);
int** MultiplyMatrixes(int** a, int** b, int size1, int size2, int size3);
int main() {
int** matrix1 = NULL, ** matrix2 = NULL, ** matrix3 = NULL;
int* newCol = NULL;
int size1, size2, size3, newRow;
printf("-How many rows in the first matrix?: ");
scanf("%d", &size1);
printf("-How many columns in the first matrix and rows in the second matrix?[size2, size3]: ");
scanf("%d", &size2); /*size2 = rows of matrix2.*/
printf("-How many columns in the second matrix?: ");
scanf("%d", &size3);
/*Build both matrices*/
printf("-First matrix input.\n");
BuildMatrix(&matrix1, size1, size2);
PrintMatrix(matrix1, size1, size2);
printf("-Second matrix input.\n");
BuildMatrix(&matrix2, size2, size3);
PrintMatrix(matrix2, size2, size3);
/*Combine the 2 matrices to a new matrix*/
matrix3 = MultiplyMatrixes(matrix1, matrix2, size1, size2, size3);
FreeMatrix(&matrix2, size2); //Free the second matrix
printf("\n-Multiplied matrix: \n");
PrintMatrix(matrix3, size1, size3);
FreeMatrix(&matrix3, size1);
FreeMatrix(&matrix1, size1);
}
void BuildMatrix(int*** pMat, int row, int col)
{
int i, j;
(*pMat) = (int**)malloc(row * sizeof(int*));
if (*pMat == NULL)
{
free(pMat);
printf("*Not enough RAM.\nTerminating.\n");
exit(1);
}
for (i = 0; i < row; i++)
{
(*pMat)[i] = malloc(col * sizeof(int));
if ((*pMat)[i] == NULL) {
printf("*Not enough RAM.\nTerminating.\n");
FreeMatrix(pMat, row);
exit(1);
}
for (j = 0; j < col; j++) {
printf("-Enter %d element in %d row: ", j + 1, i + 1);
scanf("%d", &(*pMat)[i][j]);
}
printf("\n");
}
//FreeMatrix(pMat, row);
}
void FreeMatrix(int*** matrix, int row)
{
for (int i = 0; i < row; i++)
{
free((matrix)[i]);
}
free(matrix);
}
void PrintMatrix(int** pMat, int row, int col)
{
for (int i = 0; i < row; ++i)
{
for (int j = 0; j < col; ++j)
{
printf("%d ", (pMat[i][j]));
}
printf("\n");
}
}
int** MultiplyMatrixes(int** a, int** b, int size1, int size2, int size3)
{
int i, j, k, ** c = NULL;
c = (int**)malloc(size1 * sizeof(int*));
if (c == NULL)
{
free(*c);
printf("*Not enough RAM.\nTerminating.\n");
exit(1);
}
for (i = 0; i < size1; i++) {
c[i] = malloc(size3 * sizeof(int));
if (c[i] == NULL)
{
printf("*Not enough RAM.\nTerminating.\n");
FreeMatrix(&c, size1);
exit(1);
}
for (j = 0; j < size3; j++)
{
c[i][j] = 0;
for (k = 0; k < size2; k++)
{
c[i][j] += (a[i][k] * b[k][j]);
}
}
}
}
【问题讨论】:
标签: c visual-studio matrix compiler-errors breakpoints