正常阻塞后检测到HEAP CORRUPTION(#63)

时间:2017-08-26 09:40:12

标签: c matrix

我必须向分配动态矩阵的函数发送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);
}

1 个答案:

答案 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++)