大家讨论一下Point overflow的问题吧

lanren_me 2003-06-03 11:13:56
这是什么时候产生的东东???

如何避免和解决???

一个问题100分;
...全文
83 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
lanren_me 2003-06-05
  • 打赏
  • 举报
回复
我觉得也是;
Behard 2003-06-04
  • 打赏
  • 举报
回复
应该是数值溢出了
qibo999 2003-06-04
  • 打赏
  • 举报
回复
同意 kingcaiyao(AKing) ,数组首地址是不允许随便更改的!
clong320 2003-06-04
  • 打赏
  • 举报
回复
To 楼主:
你的k1,k2,k3,k4初值給的太大,計算結果超出了float浮點數的表達范圍。
netsys2 2003-06-04
  • 打赏
  • 举报
回复
什么东东需要指针这样乱移?
lanren_me 2003-06-03
  • 打赏
  • 举报
回复
他只是一个指针;难道指针不能够在内存中移动操作?
kingcaiyao 2003-06-03
  • 打赏
  • 举报
回复
for(;f<=f2+199;f++)
你的代码有错误,f是整个数组的首址,而首址是由编译器分配的,当程序运行后,它由编译器分配,在整个运行期间是固定不变的,是不可以改动的。

lanren_me 2003-06-03
  • 打赏
  • 举报
回复
程序类似以下操作;

float *f,*f2,k1,k2,k3,k4;
f=new float[200];
f2=f;
........//副值数组;绝对是有效的数据;
*(f+0)=k1
*(f+1)=k2;
*(f+2)=k3;
*(f+3)=k4;
f +=4;
for(;f<=f2+199;f++)
{
*f=k1*(*(f-1))+k2*(*(f-2))+k3*(*(f-3))+k4*(*(f-4)); //此过程在不同的数组值时会出错;
}

delete[]f;
codecb 2003-06-03
  • 打赏
  • 举报
回复
听课.....
kingcaiyao 2003-06-03
  • 打赏
  • 举报
回复
如果指针所指向的数组元素已超边界,提示的是“Access Violation",而不是”Pointer overflow.vcl中也没有EPointerOverflow这个异常类,莫非是你自已写的异常?
netsys2 2003-06-03
  • 打赏
  • 举报
回复
?
kingcaiyao 2003-06-03
  • 打赏
  • 举报
回复
指针溢出,调试你的程序,看看程序执行到哪一步,出现这个问题。
myy 2003-06-03
  • 打赏
  • 举报
回复
Point overflow? 就是野指针吧?
ccwwbb 2003-06-03
  • 打赏
  • 举报
回复
野指针
勉励前行 2003-06-03
  • 打赏
  • 举报
回复
float *f,*f2,k1,k2,k3,k4;
f=new float[200];
f2=f;
for(;f<=f2+199;f++)
{
*f=k1*(*(f-1))+k2*(*(f-2))+k3*(*(f-3))+k4*(*(f-4));
}
delete[]f; //該為delete [] f2 ;

k1,k2,k3,k4要有初值,不然編譯器應該給你個警告:使用未初始化的變量。
再有,如果k1,k2,k3,k4初值給的太大,你看看你的計算結果會不會超出float浮點數的表達范圍。


nobill 2003-06-03
  • 打赏
  • 举报
回复
这应该是平常说的野指针,可能是溢出引起的!
调试你的程序,看看程序执行到哪一步,出现这个问题。
clong320 2003-06-03
  • 打赏
  • 举报
回复
问题出在k1,k2,k3,k4的初值上,我要去上课了,时间来不及了,下面这段是我试验的代码.
void __fastcall TForm1::Button1Click(TObject *Sender)
{
float *f,*f2,k1,k2,k3,k4,x,y;
int i=0;
f=new float[200];
f2=f;
k1=0.01;
k2=0.02;
k3=0.03;
k4=0.04; //副值数组;绝对是有效的数据;
*(f+0)=k1;
*(f+1)=k2;
*(f+2)=k3;
*(f+3)=k4;
//f +=4;
x =0;
for(i=0;i<200;i++)//;f<=f2+199;f++)
{
y = *(f + i + 0); y *= k1;
x += y;
y = *(f + i + 1); y *= k2;
x += y;
y = *(f + i + 2); y *= k3;
x += y;
y = *(f + i + 3); y *= k4;
x += y;
//+k2*(*(f-2))+k3*(*(f-3))+k4*(*(f-4)); //此过程在不同的数组值时会出错;
*(f + i + 4) = x;
ListBox1->Items->Add(x);
ListBox2->Items->Add(i);
Application->ProcessMessages();
}

delete[]f;
}
cfwei 2003-06-03
  • 打赏
  • 举报
回复
kingcaiyao(AKing)说得很对
你只要修改
for(;f<=f2+199;f++)
{
*f=k1*(*(f-1))+k2*(*(f-2))+k3*(*(f-3))+k4*(*(f-4));
}

for(;f2<=f+199;f2++)
{
*f2=k1*(*(f2-1))+k2*(*(f2-2))+k3*(*(f2-3))+k4*(*(f2-4));
}
就可以了

lanren_me 2003-06-03
  • 打赏
  • 举报
回复
另外要说明的是:


不管那种方法;实际上之运行了130个左右的循环就见鬼了;


lanren_me 2003-06-03
  • 打赏
  • 举报
回复
实际上f2和f开始是相同的地址;
for(;f<=f2+199;f++)
就像;
for (int i=4;i<200;i++)
f[i]=k1*f[i-1]+k2*f[i-2]+k3*f[i-3]+k4*f[i-4];

这应该跟上边的程序一样的目的,但实际上两者在f数组初始值很大
的情况都是出错的;

何解?
加载更多回复(2)

13,826

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧