Я хочу транспонировать матрицу в C, используя как можно меньше памяти. Поэтому нельзя просто создать копию матрицы, заполнить ее и впоследствии удалить другую. Таким образом, я хочу сделать каждый своп на самой матрице, используя 1 переменную temp для повторного использования. Матричные элементы индексируются с помощью арифметики с указателями, но, насколько я знаю, это правильно. Проблема в том, что функция не приводит к каким-либо изменениям. Структура матрицы динамически размещается и имеет следующую структуру;
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 по поводу адреса. Любые советы?