我必须向分配动态矩阵的函数发送2个静态矩阵, 矩阵1乘以矩阵2,并返回新矩阵的地址。 注意COMM很常见。
我试图删除free_matrix行,它运行正常。
void main()
{
int mat1[ROW1][COMM]={0},mat2[COMM][COL2]={0};
int** newmat=NULL;
//here i randomize the matrixes
newmat=allocate_dyn_and_mult(mat1,mat2); //newmat is now address
//of allocated dynamic after multiplied matrix.
printf("result:\n");
print_dyn_matrix(newmat,ROW1,COL2); //prints new mat;
free_matrix(newmat,ROW1); //without this line it works fine.
}
int ** allocate_dyn_and_mult(int mat1[ROW1][COMM],int mat2[COMM][COL2])
//return pointer to allocated memory in the size of row1 * col2
{
int i;
int **mat;
mat=(int**)calloc((ROW1),sizeof(int*));
for (i=0;i<COL2;i++)
{
mat[i]= (int*)calloc((COL2),sizeof(int));
}
matmult(mat1,mat2,mat); //mat will receive the multiply of mat1,mat2.
return mat;
}
释放内存
void free_matrix (int **c, int n)
{
int i;
for (i=0; i<n; i++)
free (c[i]);
free (c);
}
答案 0 :(得分:3)
首先使用
为ROW1
指针分配内存
mat=(int**)calloc((ROW1),sizeof(int*));
但是循环使用不同的长度
for (i=0;i<COL2;i++)
{
mat[i]= (int*)calloc((COL2),sizeof(int));
}
mat[i]
将在ROW1 < COL2
分配的内存之外写入,导致堆损坏。循环应该是
for (i=0;i<ROW1;i++)