Есть структура (dadaInt), которая содержит ссылку на массив чисел и размер.
Есть функция (init) в которой есть массив который добавляется в структуру.
Проблема в том что массив (data_[]) перезаписывается после завершения функции.
Результат вывода:
3
-858993460
11870055
5633636
1370782638
1371061128
Какие есть способы решение этой проблемы? (не надо предлагать static)
#include <cstdlib>
#include <iostream>
struct dadaInt
{
int* data;
int size;
};
void init(dadaInt &dadaInt_)
{
int data_[] = { 3,2,3,4,5,6 };
int size_ = sizeof(data_) / sizeof(data_[0]);
dadaInt_.data = data_;
dadaInt_.size = size_;
}
int main()
{
dadaInt data;
init(data);
for (int i = 0; i < data.size; ++i)
{
std::cout << data.data[i] << std::endl;
}
system("pause");
return 0;
}
void init(dadaInt &dadaInt_)
{
int data_[] = { 3,2,3,4,5,6 };
int size_ = sizeof(data_) / sizeof(data_[0]);
dadaInt_.data = data_;
dadaInt_.size = size_;
}
Вы присваиваете указатель на локальный массив data_, который после выхода из функции исчезает. И вы получаете указатель на непонятно какой мусор, только и всего...
Решение - выделение массива динамически.
void init(dadaInt &dadaInt_)
{
dadaInt_.data = new int[6]{3,2,3,4,5,6 };
dadaInt_.size = 6;
}
Только потом не забудьте освобождать память. Например, написав деструктор...
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники