Вырастить строку 2D-массива с помощью realloc? - PullRequest
0 голосов
/ 23 ноября 2018

Я работаю над функцией, которая интернализует и расширяет двумерный массив по ссылке.По сути, когда я вызываю эту функцию, я хочу увеличить строку на 1 и каждый раз создавать размер столбцов.

(РЕДАКТИРОВАТЬ: для пояснения)

2D array **foo = NULL
call func_v2()
if **foo = NULL
then foo = [0]
then foo = [0][size]
then foo = [1]

call func_v2()
**foo != NULL
foo[1][size]
foo[2]

call func_v2()
**foo != NULL
foo[2][size]
foo[3]
//And so on and so on

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

Моя проблема заключается в том, что каждый раз, когда я вызываю realloc в своей функции, происходит сбой.Я не уверен, почему Realloc не работает здесь.Как я могу заставить realloc работать и кто-то может объяснить, почему это не работает, спасибо.

   void func_v2(int ***arr, int size, int *len){
    /*set up first row space if NULL*/
    if (*arr == NULL) {
        *arr = malloc((*len) *sizeof(int*));
    }

    /*create columns in the array*/
    (*arr)[(*len) - 1] = malloc(size * sizeof(int *));


    /*debug test set with values*/
    for (int j = 0; j < size; j++) {
        (*arr)[*len - 1][j] = (*len);
    }

    /*increment length of row*/
    ++(*len);

    /*extend row size*/ 
    *arr = realloc(*arr, ((*len)) * sizeof(int*)); //WHY DOES THIS NOT WORK?
}

int main(void) {
    int **foo = NULL;
    int size = 5;
    int len = 1;

    func_v2(&foo,size,&len); 


    for (int i = 0; i < len-1; i++) {
        for (int j = 0; j < size; j++) {
            printf("%d ", foo[i][j]);
        }
        printf("\n");

    }

    return 0;
}
...