E
E
Eugene2015-02-28 23:27:02
C++ / C#
Eugene, 2015-02-28 23:27:02

How to make a copy of a structure?

There is a non-rectangular matrix. Can't make a copy of it. Can't find error in copyMatrix() function
I'm writing in C, not C++

// структура для задания строки матрицы
struct Line{
  int n; // количество элементов в строке матрицы
  int *a; // массив элементов
};

// структура для задания самой матрицы
struct Matrix{
  int lines; // количество строк матрицы
  Line *matr; // массив строк матрицы
};

I create two matrices (the original and its future copy).
int main()
{
  Matrix matr = { 0, NULL }; // исходная матрица
  Matrix matrT = { 0, NULL }; // копия исходной матрицы
  inputMatrix(&matr); // это функция для заполнения матрицы, там мы указываем все размеры матрицы и сами элементы. Всё работает
  copyMatrix(&matr, &matrT);  // создаем копию. но она не создается.
  outputMatrix("Source matrix", matr);  // выводим исходную матрицу на экран, всё выводится
  outputMatrix("Transposed matrix", matrT); // выводим скопированную матрицу на экран. Не выводится ничего кроме ""Transposed matrix"
}

void copyMatrix(Matrix *arr1, Matrix *arr2) // создание копии матрицы
{
  arr2->matr = (Line *)calloc(arr1->lines, sizeof(Line));
  for (int i = 0; i < arr1->lines; i++)
  {
    arr2->matr[i].a = (int *)malloc(arr1->matr[i].n*sizeof(int));
    for (int j = 0; j < arr1->matr[i].n; j++)
      arr2->matr[i].a[j] = arr1->matr[i].a[j];
  }
}

Answer the question

In order to leave comments, you need to log in

1 answer(s)
O
Ocelot, 2015-03-01
@evlevin

Forgot to set dimensions for the second matrix. The elements are copied, but the n and lines properties are not.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question