C++ 运算符new-为什么运算符new使用负值分配数组 模板类信号{ 受保护:int N;//数组的长度 公众:T*sig ;; 信号fft(); } 模板信号::fft(){ 如果(N==1)返回*this; 如果(N%2!=0) 你可以在哪里初始化this-
运算符new-为什么运算符new使用负值分配数组C++ 运算符new-为什么运算符new使用负值分配数组 模板类信号{ 受保护:int N;//数组的长度 公众:T*sig ;; 信号fft(); } 模板信号::fft(){ 如果(N==1)返回*this; 如果(N%2!=0) 你可以在哪里初始化this-,c++,arrays,new-operator,C++,Arrays,New Operator,运算符new-为什么运算符new使用负值分配数组 模板类信号{ 受保护:int N;//数组的长度 公众:T*sig ;; 信号fft(); } 模板信号::fft(){ 如果(N==1)返回*this; 如果(N%2!=0) 你可以在哪里初始化this->sig?如何使0x0062b9f8为负值?地址从来都不是负值。而且你似乎从来没有设置N任何有用的值。N%2!=0测试N是否为偶数,而不是它是否为2的幂。要测试2的幂,你需要做些什么像N&(N-1)(这个表达式重置低阶位。如果数字是二的幂,则只
模板类信号{
受保护:int N;//数组的长度
公众:T*sig ;;
信号fft();
}
模板信号::fft(){
如果(N==1)返回*this;
如果(N%2!=0)
你可以在哪里初始化this->sig
?如何使0x0062b9f8为负值?地址从来都不是负值。而且你似乎从来没有设置N
任何有用的值。N%2!=0
测试N
是否为偶数,而不是它是否为2的幂。要测试2的幂,你需要做些什么像N&(N-1)
(这个表达式重置低阶位。如果数字是二的幂,则只设置一个位,重置结果为0。)我有一个初始化这个的构造函数。sig:template Signal::Signal(int length){N=length;M=1;sig=new T[N];t0=0;deltaT=1;for(int I=0;i60)setFlag(1);else setFlag(0);}我同意你的观点James Kanze,我不想检查N是偶数还是奇数,我想检查的是2的幂,所以我会改变这个条件。但是我如何得到偶数的值。sig是0x0062b9f8{-84215051}?
template <class T> class Signal {
protected: int N; // length of array
public: T *sig;
Signal<T> fft();
}
template <class T> Signal<T> Signal<T>::fft() {
if (N==1) return *this;
if (N%2!=0)
cout<<"N is not power of 2";
else{
Signal<T> even;
even.sig=new T[N/2];
Signal<T> odd;
Signal<T> esig;
Signal<T> osig;
Signal<T> y;
y.sig=new T[N];
for (int i=0;i<N/2;i++) {
even.sig[i]=sig[2*i]; /* I failed here because new operator allocate array with negative value*/
}
esig= even.fft();
odd = even;
for (int i=0;i<N/2;i++) {
odd.sig[i]=sig[2*i+1];
}
osig= odd.fft();
/*not importan part*/
}
return y;
}