Вопрос по массивам

246
03 марта 2017, 01:56

Есть структура (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;
}
Answer 1
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;
}

Только потом не забудьте освобождать память. Например, написав деструктор...

READ ALSO
C++ mfc как записать word документ?

C++ mfc как записать word документ?

Есть MFC проект на C++, и word 2007, надо сгенерировать новый word документ без сторонних библиотек, каким образом можно это сделать ?

237
Изменить позицию QHBoxLayout Qt

Изменить позицию QHBoxLayout Qt

У меня на QMainWindow находятся QGraphicsView и QHBoxLayoutНеобходимо, чтобы при расширении окна, QHBoxLayout отъезжал вправо, а QGraphicsView оставался на месте

325
Спецификатор noexcept

Спецификатор noexcept

noexcept надо тоже писать в определении?

228
Как писать Qt-код в MSVS 2015 [требует правки]

Как писать Qt-код в MSVS 2015 [требует правки]

Пишу проект в MSVS 2015, коллега сейчас закончил свою часть, но он писал на Qt 56

224