У меня возникли проблемы с функцией push_back() в C++. По причине, которую я не понимаю, функция push_back «не примет» значение, которое я говорю ей добавить, но код работает отлично, пока я не попытаюсь отобразить нужные значения (конец кода). Я проверил тип значения, который является двойным, но он все равно не добавляет его.
Значение, которое я пытаюсь вставить, поступает из функции, которая вычисляет среднее значение вектора, извлекая значения NaN. Код работает отлично, но когда я пытаюсь отобразить нужные значения, я всегда получаю: Ошибка сегментации (сброс ядра).
Это означает, что функция первая выполняет итерацию по диапазону и создает вектор, из которого будет удалено NaN. Затем будет рассчитано среднее значение. Следующая средняя функция:
double mean_func(double **arr, int iterations, int header, int start){
std::vector vec;
for (int i=start-iterations; i < start; i++){
vec.push_back(arr[header]);
}
vec.erase(std::remove_if(std::begin(vec),
std::end(vec),
[](const auto& value) { return std::isnan(value); }),
std::end(vec));
double sum = std::accumulate(vec.begin(), vec.end(), 0.0);
double mean = sum / vec.size();
return mean;
}
Весь код, в котором transf_array_2_vec преобразует вектор в массив.
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
double** transf_vec_2_array(std::vector vals, int N, int M)
{
double** temp;
temp = new double*[N];
#pragma omp parallel for
for(int i=0; (i < N); i++)
{
temp = new double[M];
for(int j=0; j < M; j++)
{
temp[j] = vals[j];
}
}
return temp;
}
double mean_func(double **arr, int iterations, int header, int start){
std::vector vec;
for (int i=start-iterations; i < start; i++){
vec.push_back(arr[header]);
}
vec.erase(std::remove_if(std::begin(vec),
std::end(vec),
[](const auto& value) { return std::isnan(value); }),
std::end(vec));
double sum = std::accumulate(vec.begin(), vec.end(), 0.0);
double mean = sum / vec.size();
return mean;
}
double** cfun(double **indata, unsigned int rows, unsigned int cols, int max_inputs, int daily_inputs, int weekly_inputs, int inputs_short_term, const char **header_1, const char **header_2, unsigned int size_header_1, unsigned int size_header_2, double **outdata) {
std::vector< std::vector > seq_collec;
std::vectorseq;
unsigned int i, j, k, l;
unsigned int temp= 5080;
int num = omp_get_thread_num();
omp_set_num_threads(num);
//#pragma omp parallel for //private(seq)
for(i = max_inputs + weekly_inputs; i < temp ; i++) {
for(j = 0; j < size_header_1; j++ ){
for(k = 0; k < size_header_2 ; k++){
for(l = i-max_inputs; l < i; l++){
if((strcmp(header_2[k],"price")==0)|| (strcmp(header_2[k], "change")==0)){
seq.push_back(indata[l][j+k]);
seq.push_back(mean_func(indata, inputs_short_term, j*size_header_2, l));
//std::cout
Подробнее здесь: https://stackoverflow.com/questions/583 ... ore-dumped
C++: функция push_back() не добавляет двойные значения: ядро сегментации сброшено ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
OpenCV с NVIDIA VPI (интерфейс программирования зрения), ядро сброшено
Anonymous » » в форуме Python - 0 Ответы
- 8 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Не удалось связать TCP -сервер, прерванного (ядро сброшено) при использовании Photonlib
Anonymous » » в форуме C++ - 0 Ответы
- 8 Просмотры
-
Последнее сообщение Anonymous
-