动态分配2D矩阵转置(内存有效)

时间:2012-03-30 13:49:23

标签: c memory-management matrix

我想在C中转置矩阵,尽可能少使用内存。因此,不能简单地创建矩阵的副本,填充它,然后删除另一个矩阵。因此,我希望对矩阵本身进行每次交换,并使用1个临时变量进行重用。矩阵元素用指针算法编制索引,但据我所知,这些都是正确的。现在的问题是该功能不会导致任何变化。矩阵结构是动态分配的,具有以下结构;

typedef struct {
int rows;
int cols;
int** data;
    } matrix;

我现在写的转置函数如下所示;

void transpose(matrix* m){
int i,j,temp;
for(i=0;i<m->row;i++){
    for(j=0;j<m->col;j++){
        temp=*((*(m->data+i))+j);
        *((*(m->data+i))+j)=*((*(m->data+j))+i);
        *((*(m->data+j))+i)=temp;
    }
}

}

我已经尝试使用

启动该功能
int* temp=(int*)malloc()sizeof(int);

结尾
 free(temp);

这让我在Visual Studio中出现了关于adres acess的错误。有什么提示吗?

1 个答案:

答案 0 :(得分:2)

你在for-loop中对整个矩阵建立索引(我假设你的矩阵是正方形的)...你只需要索引矩阵的下三角形或上三角形,然后交换那些在矩阵的相对三角形中具有相应索引的位置。要转置矩阵的对角线,您只需要将对角线的上半部分与下半部分交换。通过对整个矩阵进行索引,您最终会进行双转置,最终会返回与原始矩阵完全相同的结果。

相关问题