evlevin
@evlevin

Как сделать копию структуры?

Есть непрямоугольная матрица. Не получается сделать её копию. Не могу найти ошибку в функции copyMatrix()
Пишу на C, не на C++

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

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


Создаю две матрицы (исходная и её будущая копия).

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];
	}
}
  • Вопрос задан
  • 3098 просмотров
Решения вопроса 1
Ocelot
@Ocelot
Забыли задать размерности для второй матрицы. Элементы копируются, а свойства n и lines - нет.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы