Это не отвечает на проблему вашего размещенного кода, но, возможно, может помочь вам в увеличении картинки:
double (*matrix)[size] = malloc(initial_size * initial_size * sizeof(double));
matrix[0][0] = 42;
matrix[size-1][size-1] = 24;
/* resizing */
double (*new_mat)[new_size] = realloc(matrix, new_size*new_size*sizeof(double));
matrix[0][0] = 42;
matrix[new_size-1][new_size-1] = 24;
/* freeing */
free(new_mat);
Разве это не намного проще?И это намного, намного быстрее, чтобы выделить / бесплатно, так как это только одно распределение.И это намного, намного быстрее в использовании, так как:
- это один непрерывный блок памяти, так что он кеш-памяти
- вы получаете прямой доступ к ячейке, у вас нет данныхзависимость от промежуточного указателя.
Пожалуйста, когда вам нужен 2D-массив, создайте 2D-массив, а не 1D-массив для указателей-N-1D-массивов.
два предупреждения: 1) если вы хотите сохранить старые данные при изменении размера, вам необходимо переместить их вручную и 2) ваш компилятор должен поддерживать C99.