LINUX.ORG.RU

История изменений

Исправление grem, (текущая версия) :

Все приходит с опытом ;)

Я розовая звезда дятел! :)
double (*a)[n] = (double (*)[n])malloc(n * sizeof(double));, хоть мы и объявили тип double (*a)[n] для 12 элементов, он, естественно, выделяет память только под 12 элементов, а не для 144. Поэтому a[11][0] = 40.0;, который до free(a), пишет не в выделенный участок памяти, а за его пределы, повреждая кучу. Инициализация должна быть следующей (подправлю в теме):
double (*a)[n] = (double (*)[n])malloc(n * n * sizeof(double));

Исходная версия grem, :

Все приходит с опытом ;)

Я розовая звезда дятел! :)
double (*a)[n] = (double (*)[n])malloc(n * sizeof(double));, хоть мы и объявили тип double (*a)[n] для 12 элементов, он, естественно, выделяет память только под 12 элементов, а на для 144. Поэтому a[11][0] = 40.0;, который до free(a), пишет не в выделенный участок памяти, а за его пределы, повреждая кучу. Инициализация должна быть следующей (подправлю в теме):
double (*a)[n] = (double (*)[n])malloc(n * n * sizeof(double));