Есть структура (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;
}
Только потом не забудьте освобождать память. Например, написав деструктор...
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Есть MFC проект на C++, и word 2007, надо сгенерировать новый word документ без сторонних библиотек, каким образом можно это сделать ?
У меня на QMainWindow находятся QGraphicsView и QHBoxLayoutНеобходимо, чтобы при расширении окна, QHBoxLayout отъезжал вправо, а QGraphicsView оставался на месте
Пишу проект в MSVS 2015, коллега сейчас закончил свою часть, но он писал на Qt 56