2014-06-10 38 views
1

我試圖從wav soundfile中讀取數據。 soundfile中的數據以塊分佈。每個塊都以char的數組[0..3]開始。我無法找到「數據」塊。首先,我認爲這是在尋找功能(soFromBeginning soBeginning problem)或類型不匹配。經過長時間的搜索後,發現問題在我更改變量名稱時消失了。爲什麼我不能在Lazarus中使用「data」作爲變量名稱

這裏是儘可能簡化的問題的程序。

procedure readwavformattest1(filenamein: string); 
    var 
     f: TFileStream; 
     data: array[0..3] of char; 
     aantalread: longint; 
    begin 
     try 
     f := TFilestream.Create(filenamein, fmopenread); 
     aantalread := f.Read(data, sizeof(data)); 
     if aantalread < sizeof(data) then 
      Exit; 
     finally 
     f.Free; 
     end; 
    end; 


    procedure readwavformattest2(filenamein: string); 
    var 
     f: TFileStream; 
     datal: array[0..3] of char; 
     aantalread: longint; 
    begin 
     try 
     f := TFilestream.Create(filenamein, fmopenread); 
     aantalread := f.Read(datal, sizeof(datal)); 
     if aantalread < sizeof(datal) then 
      Exit; 
     finally 
     f.Free; 
     end; 
    end; 

程序2正在工作並給出了用於數據「RIFF」的wav文件,程序1給出了數據「nil」。這兩個程序給了我很好的結果4 程序中唯一的區別是var名稱「數據」與「數據」 我不明白髮生了什麼問題。數據不是保留字,如果是,編譯器應該給出錯誤。如果數據是已經聲明的變量,則應使用局部變量。如果我省略了數據聲明,那麼數據對於編譯器來說是一個未知變量(所有調試檢查都打開) 不知何故,我不能使用「data」這個詞作爲變量名。

回答

1

它應該只是工作,而我不是在很長時間內看到了一些基本的錯誤,我認爲它必須是你沒有顯示的東西(如代碼搞亂堆棧)。

最好是把問題縮小到它的最低限度(如100行控制檯程序),並且如果問題消失,同時降低提交FPC bugtracker

,這是一個強烈的信號,一個出界內存訪問正在發生。

+0

作爲問題26347提交給FPC bugtracker。它似乎是調試器中的問題。將鼠標懸停在變量上方會給出錯誤的答案,而實際上在變量中存儲的是正確的值。 – user3726575

相關問題