Инициализация 2d массива с использованием 1 d массива в c ++

0

Использование инициализации массива 2d запрещено, и я получаю эту ошибку -

Мне поручено использовать main() как есть, и я могу редактировать только две другие функции.

source.cpp(81): error C4700: uninitialized local variable 'Array' used
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Код:

int main(){
    int **Array;
    Array = getArray2D(10, 10, Array);
    for (int i = 0; i<10; i++)
    for (int j = 0; j<10; j++){
        Array[i][j] = 4;
    }
    cout << endl;

    for (int i = 0; i<10; i++){
        for (int j = 0; j<10; j++){
            cout << Array[i][j];
        }
        cout << endl;
    }
    getchar();

    return 0;
}



int* getArray1D(int n, int *A)
{
    A = new int[n];
    for (int i = 0; i < n; ++i)
        A[i] = 0;
    return A;
}
int** getArray2D(int m, int n, int** A)
{
    // m array of integers
    A = new int*[m];
    for (int i = 0; i < m; ++i)
    {
        // create a 1d array on each element of a A
        A[i] = getArray1D(n, A[i]);

    }
    return A;
}

Как я могу исправить это?

  • 2
    ошибка не требует пояснений - массив в первой строке не инициализирован. Используйте только getArray2D(10,10,Array) . У вас могут быть проблемы с объявлением типа указатель / переменная
  • 0
    Я получил указание использовать main () как есть, и я могу редактировать только две другие функции.
Показать ещё 3 комментария
Теги:
arrays

1 ответ

3
Лучший ответ

Проблема в том, что вы не инициализируете Array в NULL, а затем используете его.

Поэтому измените это:

int **Array;
Array = getArray2D(10, 10, Array);

к этому:

int **Array = NULL;
Array = getArray2D(10, 10, Array);

На самом деле вы получаете предупреждение, а не сообщение об ошибке:

warning: ‘Array is used uninitialized in this function [-Wuninitialized]

Не забывайте выделять свою память позже!

  • 1
    Это удалит сообщение об ошибке, но это не правильное исправление. Этот параметр вообще не должен существовать, так как функция его не использует.
  • 0
    Функция использует массив @interjay. Он не может использовать его и делать это следующим образом: gsamaras.wordpress.com/code/2d-dynamic-array-c , но в коде OP он используется внутри функции.
Показать ещё 7 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню