Внимательно внимательно документация malloc
.Он может потерпеть неудачу, а когда он потерпит неудачу, malloc
вернет NULL
(а причина отказа задается как errno
, который вы часто отображаете с помощью perror
).
Таким образом, вы должны проверить на отказ malloc
.Типичный код по крайней мере:
u = (double**)malloc(Size*sizeof(double*));
if (u==NULL) { perror ("malloc u"); exit(EXIT_FAILURE); };
и аналогично для вашего rho_u
и каждого rho_u[i]
Некоторые операционные системы могут обеспечивать превышение памяти .Эта функция мне не нравится.
Подумайте об инициализации каждой зоны памяти полностью.И использование памяти вне допустимой зоны памяти (или действительного адреса) - это неопределенное поведение (и у вашей программы есть такая, замеченная Ctx-ответом ).Будь напуган .
Я также рекомендую использовать valgrind .Это очень удобный инструмент для поиска ошибок, связанных с памятью, и он мог обнаружить ваши.