我想轉置一個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