设置动态数组长度时报错:非法访问

Oceanable 2017-12-13 12:57:30
在这样的情况下出现非法访问,奇怪了:

procedure TColumn.Newton( n:integer; Nzu, Mxu, Myu: double; var times: integer );
var
t,i: integer; //牛顿法解非线性方组
eMax: double;
JCB,JCB_1: Darray2; { type Darray2 = array of array of d }
X,X0,JF,FX: Darray1;
begin
eMax := 0.0;

SetLength(JCB, n+1, n+1); { 这里报错:access violation at XXXXXX }


SetLength(JCB_1, n+1, n+1);

SetLength(FX, n+1);
SetLength(JF, n+1);

SetLength(X , n+1);
for i:= 1 to n do begin X[i]:= 0.0; end;
SetLength(X0, n+1); for i:= 1 to n do begin X0[i]:= 0.0; end;

后面的省略........
...全文
501 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Oceanable 2017-12-15
  • 打赏
  • 举报
回复
引用 10 楼 DelphiGuy 的回复:
新建一个项目,就SetLength,会出错吗,如果还出错,是你的硬件有问题,否则是你的代码有问题。
刚才试过,单独一个项目 setlength 是没有问题的。我再检查下其他语句。
leeky 2017-12-15
  • 打赏
  • 举报
回复
查其它部分的代码,数组越界?空指针操作?
  • 打赏
  • 举报
回复
新建一个项目,就SetLength,会出错吗,如果还出错,是你的硬件有问题,否则是你的代码有问题。
Oceanable 2017-12-14
  • 打赏
  • 举报
回复
引用 6 楼 xiaocongzhi 的回复:
代码上看这句话 没问题呀;你看看调用这个函数外面是不是有问题,编译器定位在这句 不一定就是这句的问题
最怕遇到这种错误,弹出一些(不知道是不是)编译器的东西,不知道是哪句代码有问题
Oceanable 2017-12-14
  • 打赏
  • 举报
回复
引用 5 楼 lyhoo163 的回复:
SetLength(JCB, n+1, n+1); { 这里报错:access violation at XXXXXX } 在动态数组设置长度时出错,一般都是N越界。 是否引用参数问题。加个变量过渡一下: var N1:integer; N1:=n; ShowMessage(Inttostr(N1)) SetLength(JCB, N1+1, N1+1); 试试!
嗯,我今晚回去试试。
xiaocongzhi 2017-12-14
  • 打赏
  • 举报
回复
代码上看这句话 没问题呀;你看看调用这个函数外面是不是有问题,编译器定位在这句 不一定就是这句的问题
Oceanable 2017-12-14
  • 打赏
  • 举报
回复
刚才我试了一下,我甚至将 n 直接改为常数 3 都出现非法访问,,, 这东西跟操作系统有没有关系? 难道就一直卡在这里?
lyhoo163 2017-12-14
  • 打赏
  • 举报
回复
SetLength(JCB, n+1, n+1); { 这里报错:access violation at XXXXXX } 在动态数组设置长度时出错,一般都是N越界。 是否引用参数问题。加个变量过渡一下: var N1:integer; N1:=n; ShowMessage(Inttostr(N1)) SetLength(JCB, N1+1, N1+1); 试试!
Oceanable 2017-12-13
  • 打赏
  • 举报
回复
抱歉,这里没写完整,我定义了两个双精度的数组类型: type Darray1 = array of double type Darray2 = array of array of double 这个方法我调试的时候一直没有修改过的,不知道怎么的,突然出现这个错误,,, 看了几天了,真的很奇怪。 n 值传入不会有问题的,,,我用断点查看过 n = 3
leeky 2017-12-13
  • 打赏
  • 举报
回复
奇怪呀,按楼主的方式定义了个array of array of integer; SetLength(aVar,4,4)是没问题的。 检查是不是其它地方的指针操作引起的异常
  • 打赏
  • 举报
回复
应该传入n的问题。
leeky 2017-12-13
  • 打赏
  • 举报
回复
SetLength(JCB_1, n+1); for idx := 0 to n do SetLength(JCB_1[idx], n+1);

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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