Как присвоить значение указателю в массиве указателей 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;