我正在尝试编写代码以实现C ++中数字信号处理的直接类型2实现结构。
所以我有一个类,当然还有属于它的标题:
#include "DirectType2.h"
DirectType2::DirectType2()
{
}
DirectType2::DirectType2(vector<double> inputBCoefficients, vector<double> inputACoefficients)
{
inputXFunction = inputACoefficients;
inputYFunction = inputBCoefficients;
}
void DirectType2::setInputFunctions(vector<double> inputA, vector<double> inputB)
{
inputXFunction = inputA;
inputYFunction = inputB;
}
vector<double> DirectType2::getInputXFunction()
{
return inputXFunction;
}
vector<double> DirectType2::getInputYFunction()
{
return inputYFunction;
}
double DirectType2::xOfNFunction(unsigned int n)
{
double sum = 0;
for (unsigned int i = 1; i <= n || i < inputXFunction.size(); i++)
{
sum += inputXFunction[i] * xOfNFunction(n - i);
}
double x = inputXFunction[0] + sum;
return x;
}
double DirectType2::wOfNFunction(unsigned int n)
{
double w = 0;
double sum = 0;
for (unsigned int i = 1; (i < n || i < inputXFunction.size()); i++)
{
sum -= inputXFunction[i] * wOfNFunction(n - i);
}
w = inputXFunction[1] - sum;
return w;
}
double DirectType2::yOfNFunction(unsigned int n)
{
double y = 0;
for (unsigned int i = 0; i < n || i < inputYFunction.size(); i++)
{
y += inputYFunction[i] * wOfNFunction(n - i);
}
return y;
}
DirectType2::~DirectType2()
{
}
我的源文件如下:
#include <iostream>
#include "DirectType2.h"
using namespace std;
int main()
{
double myDoubleY[] = { 0.01031, 0.06188, 0.1547, 0.2063, 0.1547, 0.06188, 0.01031 };
double myDoubleX[] = { 1, -1.188, 1.305, -0.6743, 0.2635, -0.05175, 0.005023 };
vector<double> yFunction(myDoubleY, myDoubleY + sizeof(myDoubleY) / sizeof(double));
vector<double> xFunction(myDoubleX, myDoubleX + sizeof(myDoubleX) / sizeof(double));
DirectType2 port(yFunction, xFunction);
cout << "y(n) med n = 6 bliver: " << port.yOfNFunction(6) << endl;
return 0;
}
现在我的问题是,当我运行此代码时,会弹出一个名为“ xutility”的文件并引发此异常:
Unhandled exception at 0x01284B77 in Portefølje 2 - forsøg 2.exe: 0xC00000FD: Stack overflow (parameters: 0x00000001, 0x00E02F64).
现在我当然知道发生了堆栈溢出,但是我不明白为什么它会打开此文件并从中引发异常,因为我真的不觉得自己曾经使用过此文件。 / p>
引发异常的代码段为:
const _Ty2& _Get_second() const noexcept
{ // return const reference to second
return (_Myval2);
}
如果我尝试让代码继续,它会说:
Exception thrown at 0x01284B77 in Portefølje 2 - forsøg 2.exe: 0xC0000005:
Access violation writing location 0x00E00FB4.
编辑:
在标头中,我定义了两个向量inputXFunction
和inputYFunction
,它们都设置为包含双精度。
答案 0 :(得分:0)
每个for循环都应使用&&
而不是||
,因为您需要同时满足两个条件才能继续安全地访问数组。例如:
for (unsigned int i = 1; (i < n && i < inputXFunction.size()); i++)
{
sum -= inputXFunction[i] * wOfNFunction(n - i);
}
代替:
for (unsigned int i = 1; (i < n || i < inputXFunction.size()); i++)
{
sum -= inputXFunction[i] * wOfNFunction(n - i);
}