Когда перечесляют через сout елементы массива double вместо чисел -1.45682e+144 и не критичная ошибка C6385

void S(double* x ) {
    for (int i = 0; i < l; ++i) {
        n[i] = x[i];
cout << n[i] << endl;
        
    }
}

вот откуда берется х

double* GetInput(const char * filename, unsigned int h,unsigned int w) {
    sf::Image image;
    vector<double> in;
    image.loadFromFile(filename);
    
    for (unsigned int i = 0; i < h; ++i) {
        for (unsigned int j = 0; j < w; ++j)
        {
            sf::Color c;
            c = image.getPixel(j,i );
            in.push_back((int)(c.r + c.b + c.g) / 3);
            //int u = (int)((c.r + c.b + c.g) / 3);
            //cout << u << endl;
        }
    }
    double* input = &in[0];
    //copy(in.begin(), in.end(), input);
    return input;
    
}

а l это костанта которая равна w*h и текст ошибки вот текст ошибки серьезность код описание проект файл строка состояние подавления предупреждение c6385 чтение недопустимых данных из "x": доступный для чтения объем равен "l 8" байт, однако считать можно только "16" байт. source.cpp 156

int main(){
    N g(28*28);//это и есть 'l'
    g.S(GetInput("f.png", 28, 28));
    return 0;
}

Ответы (2 шт):

Автор решения: Павел Ериков

Т.к. вы возвращаете double* input, а не vector<double> in при завершении этой функции у in вызывается деструктор, где происходит удаление данных, а вы возвращаете указатель на эти данные, следовательно в input после завершения функции будут не определенные значения, ну и в целом вы возвращаете пустой указатель.

Чтобы решить эту проблему нужно сначала под input выделить новую память куда мы будем копировать данные из вектора, а потом раскомментировать строчку :)) :

double* input = new double[w * h];
copy(in.begin(), in.end(), input);

то есть произвести полное копирование данных.

→ Ссылка
Автор решения: vlad

а вот это помогло

 /*double* input = &in[0];
        copy(in.begin(), in.end(), input);*/
        double* input = new double[w * h];
        for (int i = 0; i < w * h; i++) {
            input[i] = in[i];
        }
        return input;
→ Ссылка