2012-11-26 48 views
0
var all: TThreadList = nil; 

procedure TForm1.IdTCPServer1Connect(AContext: TIdContext); 
var list:tlist; 
begin 
    try 
    list := all.LockList; 
    try 
    list.Add(0); 
    finally 
    all.UnlockList; 
    end; 
    except 

    end; 
end; 

的telnet 127.0.0.1 1234TThreadList訪問衝突上鎖定列表

爲什麼它變得訪問衝突?

回答

8

我希望你忘了創建TThreadList。您需要

all := TThreadList.Create; 

某處。例如,在該單元的initialization部分。

+0

是的!花了幾個小時,謝謝) – waza123

+0

每當你在方法調用中遇到訪問衝突時,檢查實例變量是否有效。在調試器中,你會看到'all'的值爲'nil'。這是你的故事標誌。 –

+0

本地POD類型變量(如原始指針)未初始化爲零/零。所以不,不能保證調試器會爲'all'變量顯示'nil'。 –