Как присвоить значение указателю в массиве указателей C++

Вот код моей программы:

#include <iostream>
using namespace std;

int main()
{
    int** a = new int*[10];
    for (size_t i = 0; i < 10; i++)
    {
        a[i] = nullptr;
    }
    for (size_t i = 0; i < 10; i++)
    {
        *a[i] = i; //<========== на этом этапе ошибка
    }
    for (size_t i = 0; i < 10; i++)
    {
        cout << *a[i] << ' ';
    }
}

Программа вбрасывает исключение: Вызвано исключение по адресу 0x00B425AC в Main.exe: 0xC0000005: нарушение прав доступа при записи по адресу 0x00000000.

Почему это происходит? Ведь я разыменовываю i-тый указатель и присваиваю ему значение, все же должно быть по идее нормально.

И как можно решить данную проблему, с учетом того, что мне нужно оставить массив указателей.


Ответы (2 шт):

Автор решения: Learpcs

Указатель в который я пытался положить значение указывал на nullptr, то бишь вникуда. И в это вникуда я пытался присвоить значение. Значит нужно просто выделить памяти для значения.

Код решения моей проблемы:

int main()
{
    int** a = new int*[10];
    for (size_t i = 0; i < 10; i++)
    {
        a[i] = nullptr;
    }
    for (size_t i = 0; i < 10; i++)
    {
        a[i] = new int;
        *a[i] = i;
    }
    for (size_t i = 0; i < 10; i++)
    {
        cout << *a[i] << ' ';
    }
}
→ Ссылка
Автор решения: AR Hovsepyan

Почему вы не хотите выполнить все в одном цикле?

int** a = new int*[10];
for (size_t i = 0; i < 10; i++)
{
    a[i] = new int(i);
    cout << *a[i] << ' ';
    delete a[i];
}
delete[]a;
→ Ссылка