Вы пытаетесь изменить значение arr (где это указывает), это ошибка, потому что указатель этого типа не может быть переназначен на что-то другое, если он не был параметром. Вы можете думать об этом как о константной переменной. Что вы не можете изменить его значение. Вы можете сделать следующее:
double * arr [2] ;
И затем вы вызываете malloc .... и, если не хотите придавать ему какой-либо размер, вы можете использовать указатель на указатель на double. следующим образом:
double ** arr;
и затем вызвать malloc следующим образом:
arr = (double **) malloc(sizeof(double *) * max);
, так что здесь у вас есть массив указателей, которые ни на что не указывают, если вы хотите, чтобы они это делали,Вы должны выделить память для каждого из них следующим образом:
for (int i = 0; i < max; i++){
arr[i] = malloc(sizeof(double) * 2);
}