调试出错,EXPRESSION:BLOCK_TYPE_IS_VALID(pHead->nBlockUse )
调试出错,求助:EXPRESSION:_BLOCK_TYPE_IS_VALID(pHead->nBlockUse )

我的程序中调用了以下函数:
void fft(int fft_nLen, int fft_M,int isign)
{
int i;
int lev,dist,p,t;
complex B;
W = (complex *)malloc(complexsize*fft_nLen/2);
for(lev=1; lev<=fft_M; lev++)
{
dist = (int)pow(2.0,lev-1);
for(t=0; t<dist; t++)
{
p = isign*t*(int)pow(2.0,fft_M-lev);
W[p].real = (float)cos(2*PI*(p)/fft_nLen);
W[p].image = (float)(-1*sin(2*PI*(p)/fft_nLen));
for(i=t; i<fft_nLen; i=i+(int)pow(2.0,lev))
{
B = Add(A[i],Mul(A[i+dist],W[p]));
A[i+dist] = Sub(A[i],Mul(A[i+dist],W[p]));
A[i].real = B.real;
A[i].image = B.image;
}
}
}
free(W);
}
我在网上查到,出现这种问题一般都是同一个内存释放了两次,但是我的问题是,当isign设置为1的时候,程序运行正常,当isign设置为-1时才会报错。所以应该和内存重复释放没有关系。那么问题出现在哪里呢?
------解决思路----------------------
p = isign*t*(int)pow(2.0,fft_M-lev); 这里 isign为负的时候p计算来是否会为负数呢?
W[p] 访问时是否会越界呢?
基本上是由于越界, 导致内存被破坏, 释放时就会出错.
------解决思路----------------------
p = isign*t*(int)pow(2.0,fft_M-lev);
W[p].real = (float)cos(2*PI*(p)/fft_nLen);
W[p].image = (float)(-1*sin(2*PI*(p)/fft_nLen));
isign = -1;
p为负数,然后一个负数当做下标?!
我的程序中调用了以下函数:
void fft(int fft_nLen, int fft_M,int isign)
{
int i;
int lev,dist,p,t;
complex B;
W = (complex *)malloc(complexsize*fft_nLen/2);
for(lev=1; lev<=fft_M; lev++)
{
dist = (int)pow(2.0,lev-1);
for(t=0; t<dist; t++)
{
p = isign*t*(int)pow(2.0,fft_M-lev);
W[p].real = (float)cos(2*PI*(p)/fft_nLen);
W[p].image = (float)(-1*sin(2*PI*(p)/fft_nLen));
for(i=t; i<fft_nLen; i=i+(int)pow(2.0,lev))
{
B = Add(A[i],Mul(A[i+dist],W[p]));
A[i+dist] = Sub(A[i],Mul(A[i+dist],W[p]));
A[i].real = B.real;
A[i].image = B.image;
}
}
}
free(W);
}
我在网上查到,出现这种问题一般都是同一个内存释放了两次,但是我的问题是,当isign设置为1的时候,程序运行正常,当isign设置为-1时才会报错。所以应该和内存重复释放没有关系。那么问题出现在哪里呢?
------解决思路----------------------
p = isign*t*(int)pow(2.0,fft_M-lev); 这里 isign为负的时候p计算来是否会为负数呢?
W[p] 访问时是否会越界呢?
基本上是由于越界, 导致内存被破坏, 释放时就会出错.
------解决思路----------------------
p = isign*t*(int)pow(2.0,fft_M-lev);
W[p].real = (float)cos(2*PI*(p)/fft_nLen);
W[p].image = (float)(-1*sin(2*PI*(p)/fft_nLen));
isign = -1;
p为负数,然后一个负数当做下标?!