У меня возникли проблемы с реализацией динамической матрицы. Теоретически кажется ясным, что я должен делать, и я уже прочитал некоторые подобные вопросы на этом сайте (а также на других ресурсах). Хотя, следующий очень простой код не работает. Вы не против предлагать, как найти ошибки?Пытается реализовать матрицу динамического размера в C. Где ошибка?
#include <stdio.h>
#include <stdlib.h>
int main() {
int dim1 = 10; // #Rows
int dim2 = 4; // #Columns
int i;
int j;
double **mtrx = (double **)malloc(sizeof(double **) * dim1);
// mtrx is my dynamic matrix, of size dim1*dim2 //
for (i = 0; i < dim1; ++i)
mtrx[i]= (double *)malloc(sizeof(double *) * dim2);
// (1) Inizialize//
for (i = 0; i < dim1; ++i) {
printf("(%d):\t", i);
for (j = 0; j < dim2; ++j) {
mtrx[i][j] = i;
printf("mtrx[%d][%d] = %.f ", i, j, mtrx[i][j]);
}
printf("\n");
}
// (2) Show the results//
printf("\nShow the results:\n");
for (i = 0; i < dim1; ++i) {
printf("(%d):\t", i);
for (j = 0; j < dim2; ++j)
printf("mtrx[%d][%d] = %.f ", i, j, mtrx[i][j]);
printf("\n");
}
// (3) Free the memory
printf("\n***free the memory***\n");
for (i = 0; i < dim1; ++i)
free(mtrx[i]);
free(mtrx);
return 0;
}
Целью моего кода является следующее. Сначала объявите динамическую матрицу размера dim1 * dim2 (т. Е. Строки «dim1» и столбцы «dim2»). Than, phase (1), инициализировать каждый элемент, следующий за простым шаблоном (mtrx [i] [j] = i). Обратите внимание, что здесь есть «превышение» команд printf: я добавил его для целей «отладки», чтобы убедиться в правильности процедуры инициализации (что работает правильно). Затем, фаза 2, я показываю результаты, и, наконец, я освобождаю используемую память.
Проблемы:
- фаза 2 не показывает результаты "правильно";
- в свободной фазе, я получаю ошибку, как
*** свободный(): недействительный следующий размер (быстро) ...
Мой подозреваемый: у меня может быть неправильно объявила память для моей матрицы, вызывая некоторое переполнение данных и несовместимость с «свободной» инструкцией, но, к сожалению, мне не удается найти ошибку.
Я благодарю вас за любую помощь !!!
В первом 'malloc' вам нужно использовать' sizeof (double *) 'и во втором' sizeof (double) '. Удачи. –
Гоша, вы правы! Огромное спасибо! ;) – user233650
Добро пожаловать. –