我想转置一个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接取一个错误的结局。有小费吗?
如果是正方形(rows == cols),则只能像这样在原地进行转置。如果不是正方形,那么就有方法,但它们要复杂得多。 – 2012-03-30 13:56:49
[使用1D数组的原地矩阵转置]可能的重复(http://stackoverflow.com/questions/9902767/in-place-matrix-transposition-using-a-1d-array) – 2012-03-30 13:57:44