c - 动态分配的二维矩阵转置(内存有效)

标签 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 中出现有关地址访问的错误。有什么建议吗?

最佳答案

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

关于c - 动态分配的二维矩阵转置(内存有效),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9944282/

相关文章:

python - 如何在 python 中将 2D 数组 reshape 为 1D 数组?

c - 如何使用NDK为Android设备(ARM)编译C代码?

java - 从 Java 中的二维数组矩阵获取行和列

linux上的c++应用程序,在kill之前挂机

c++ - 具有动态分配大小和预定大小的简单数组内存分配

c++ - 为转发链链接新的运营商

php - 如何修复 PHPExcel 耗尽的内存?

python - 使用 scipy 计算矩阵排名

c - 减去一个子串

c - 为什么会出现此错误? int 前的期望表达式