Уже установлено, что
*ptr[0] = a[0];
с нераспределенным указателем - неопределенное поведение.
Решение
ptr[0] = &a[0];
тоже уже дано. Это работает, но оно ограничено, потому что теперь массив ptr
привязан к a
, что вам не всегда нужно. В этом случае вы можете захотеть
ptr[0] = new int(a[0]);
Это инициализирует массив значениями от a
, но сохраняет его независимым. Тем не менее, это вводит ручное управление памятью, и это может стать сложным в более сложном коде (утечки памяти, двойные освобождения, висячие указатели), поэтому было бы более похожее на C ++ решение (при условии, что указатели указывают на что-то более интересное, чем целое число, потому что теперь кажется, что указатели не нужны).
#include <memory>
#include <vector>
#include <iostream>
int main() {
int a[]={1,2,3,4,5};
std::vector<std::unique_ptr<int>> ptrs;
for(auto i: a)
{
ptrs.emplace_back(std::make_unique<int>(i));
}
for(auto& i: ptrs)
{
std::cout << *i;
}
}