2015-04-30 2 views
-1

Что не так с этой функцией, которая, как ожидается, добавит строку и столбец в заданный 2D-массив? Матрица симметрична.функция для изменения 2d массива для добавления строки столбца с использованием realloc

void updateMatrix(double ***mat, int size, double *vec) 
{ // mat is sizeXsize matrix, length of vec is size+1 
    *mat = (double**)realloc(*mat, (size + 1)*sizeof(double*)); 
    (*mat)[size] = (double*)malloc((size + 1)*sizeof(double)); 

    for(int i = 0; i < size + 1; i++) { 
     (*mat)[size][i] = vec[i]; 
    } 

    for(int i = 0; i < size; i++) { 
     (*mat)[i] = (double*)realloc((*mat)[i], (size + 1)*sizeof(double)); 
     (*mat)[i][size] = vec[i]; 
    } 
} 
+1

Трудно сказать, какие проблемы вы испытываете? У вас есть ошибки в построении? Ошибки во время выполнения или сбои? Неожиданные результаты? Что-то другое? –

+2

Кроме того, не переназначайте указатель, который вы перераспределяете на себя, подумайте о том, что произойдет, если 'realloc' завершится с ошибкой и возвращает' NULL'. –

+0

ошибка сегментации –

ответ

0

Ваш перераспределить возвращает NULL во второй цикл .. Я пытаюсь выяснить, почему.

Вы выделили все перед рукой? Потому что, скорее всего, вы можете передать указатель не NULL и нераспределенный указатель на realloc. И это запрещено/вызывает ошибки

Или, как говорит @MichaelDorgan, вы можете просто передать гигантский размер своей функции, но я искренне надеюсь, что вы не пытаетесь выделить несколько Go для массива. В противном случае мне любопытно, как его использовать.

+0

Или он просто может пройти гигантский размер. Правильно, если/обработка кода вокруг распределений наверняка ответит на некоторые из его вопросов. –

 Смежные вопросы

  • Нет связанных вопросов^_^