这似乎是世界上最简单的东西,我已经准备好把头发拉过来了.
我有一个看起来像这样的单位;
Unit myUnit;
// ...
//normal declarations
//...
Public
//bunch of procedures including
Procedure myProcedure;
const
//bunch of constants
var
//bunch of vars including
myCounter:integer;
Implementation
Uses //(all my uses)
// All of my procedures including
Procedure myProcedure;
try
// load items from file to TListBox - this all works
except
on EReadError do begin
// handle exception
end;
end; //try
myCounter:=0; // <-- ACCESS VIOLATION HERE
while myCounter //...etc
这是一个变量的简单分配,我不知道它为什么这样做.我已经尝试将该变量本地的变量声明到整个过程 – 无论我在哪里尝试这样做,我都不能在这个过程中向任何地方声明的整数赋值为0,而不会抛出访问权限违反.我完全难过了.
我从同一单元内的按钮OnClick处理程序中调用该过程,但无论我从哪里调用它都会引发异常.疯狂的是,我在整个程序中的十几个其他地方做同样的事情没有问题.为什么在这?我完全失去了.
解决方法
读取地址00000008意味着您正在读取一个与nil指针相差8个字节的变量.这根本不适合你在这里尝试做的事情,因为你正在写作,而不是阅读,而你正在编写一个常量,而不是从某个地方读取的变量.
你确定这是触发异常的实际行吗?你在这条线上放了一个断点吗?您是否尝试过将此行移至程序的顶部?
没有你真正的代码在我面前很难确定,但如果我不得不猜测,我会说这之前的行导致了异常,然后指令指针已经增加,所以Delphi突出显示下一行.