Значение массива изменяется при копировании в другой массив

Моя цель состоит в том, чтобы создать программу модуляции импульсного режима, которая бы принимала амплитуду и период времени и меняла ее на двоичный.
Я посмотрел на эту проблему, обнаружил, что я использовал локальную переменную в функции, поэтому она выходила за рамки, изменил код, но проблема сохраняется.
Код :

#include <iostream>
#include <cmath>
#define SAMPLE_SIZE 12

class sine_curve
{
public:int get(double amplitude, double time, double *x, double frequency, int sample)
{
for(sample = 0; sample <= time; sample++)
{
x[sample] = amplitude * sin(2 * 3.142 * frequency * sample);
std::cout << x[sample]<<"\t";
}

std::cout << std::endl;
return *x;    }

};

int main()
{

double amplitude, time, frequency, x[SAMPLE_SIZE], y[SAMPLE_SIZE];
int sample;

std::cout << "Enter amplitude: ";
std::cin >> amplitude;
std::cout << "Enter time: ";
std::cin >> time;
sine_curve sine;
sine.get(amplitude, time, x, frequency,sample);

for(sample = 0; sample <= time; sample++)
{
std::cout << x[sample] << std::endl;
}

std::cout << std::endl;

*y = *x;
for(sample = 0; sample <= time; sample++)
{
std::cout << y[sample] << std::endl;
}
}

Выход ::
Введите амплитуду: 23
Введите время: 3
0 1.00344e-307 2.00687e-307 3.01031e-307
0
1.00344e-307
2.00687e-307
3.01031e-307

0
2.07377e-317
5.61259e-321
2.12203e-314

Когда я печатаю массив y, значение меняется.
Я последовал за этот Ссылка и остальное я не помню, но их ответ был таким же.

0

Решение

Проблема заключается в следующем:

*y = *x;

Проблема в том, что массивы не могут быть скопированы с помощью =, Для выполнения этой работы должна быть вызвана функция, будь то std::copy, memcpy, твой собственный for петля и т. д.

Чтобы облегчить это, вы можете использовать std::array вместо обычных массивов, и с минимальными изменениями в коде, так как std::array перегрузки operator = так что копия может быть сделана с использованием более «естественного» синтаксиса.

Если x а также y являются

std::array<double, SAMPLE_SIZE>

тогда копирование просто:

y = x;

Живой пример с использованием std :: array

Обратите внимание, что существуют проблемы с вычислениями и использованием неинициализированных переменных, которые выходят за рамки данной проблемы копирования массива. Те вопросы, которые вам нужно будет решить.

1

Другие решения

Других решений пока нет …