JMP 存取衝突 - 可能的原因?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />如果可以回答這個問題(當然也可能不能),那麼導致出現「JMP 已執行存取衝突並將關閉」的致命錯誤訊息的可能原因是什麼?例如,我是否應該留意將資料寫入鎖定的表或類似情況的嘗試?
多年來,我在各種腳本編寫練習中時不時地遇到這個問題,但從未真正找出原因。通常我會設法隔離明顯發生致命錯誤的腳本區塊,然後簡單地以不同的方式重寫它,之後問題就消失了。隨著我的腳本隨著時間的推移而改進,我遇到的此類問題越來越少,但我仍然時不時地遇到一個問題- 我現在正在一個相當複雜的腳本中查看一個問題,想知道從哪裡開始。 是否有任何我應該注意的可能原因,或任何可能產生此類錯誤的可疑腳本結構?
非常感謝
回覆:JMP 存取衝突 - 可能的原因?是的,我發現如果您的資料類型(例如字元、數字等)應該混合在不同的列中,那麼您可能會遇到這種違規情況,尤其是在處理大量資料時。 就我而言,表中的幾行略有重疊,因此,我的數字變數應該位於具有該變數名稱的特定列中,並放入具有字元資料類型的列中。 在JMP技術支援仔細查找後,我仔細查看了資料表,發現資料表中的哪些行導致了問題。 最初,他們假設這是一個系統錯誤,但我發現發生這種情況是因為發生崩潰/存取衝突時,從我正在處理的資料表的 331,670 行開始,一些變數(如前所述)略有重疊。 我建議您仔細確保每個變數適當地位於同一列中,並且每列的資料類型和建模類型都相同。 也就是說,數字變數列中不應包含字元變數。 即使有時我們在郵遞區號的情況下使用數字變數作為字元。 但是,我想你已經明白了。 至少對於我的情況來說,這似乎是問題所在。 我只是重新加載原始文字檔案並再次格式化資料就解決了這個問題。
回覆:JMP 存取衝突 - 可能的原因?謝謝丹的建議,我剛剛提交了。
回覆:JMP 存取衝突 - 可能的原因?如果您有演示崩潰的腳本,請將其發送至JMP 技術支持。
回覆:JMP 存取衝突 - 可能的原因?您報告的問題已在未來版本中修復。當您看到這些問題時,請務必向技術支援報告 - 我們會盡力盡快修復崩潰,並且通常可以幫助您解決根本問題。
回覆:JMP 存取衝突 - 可能的原因?該問題與文字檔案的輸入有關,該文字檔案的最後幾行在包含數字資料的列中包含字元資料。 表格有超過 291,000,000 行,那些稍微錯位的資料位於資料表的最後幾 (4) 行。 我糾正了這些,效果很好,但我又遇到了這個問題。 JMP 技術支援提供了他們認為發生問題的確切行,但在重新檢查資料後,我發現輸入文字資料在錯誤欄位中有一些稍微錯位的資料。
回覆:JMP 存取衝突 - 可能的原因?感謝您的投入。 我認為在這種情況下,問題與程式碼的好壞無關。
回覆:JMP 存取衝突 - 可能的原因?JMP 允許您在 1 行程式碼中發送多個訊息,但我沒有這樣做的意義 - 它很醜陋,含義不明確,並且使調試變得不可能。所以也許 JMP 崩潰只是提醒我們嘗試編寫像樣的程式碼!
回覆:JMP 存取衝突 - 可能的原因?我也遇到了這個問題。就我而言,很難檢測到原因,因為整個腳本是一個大循環,只有在 20 或 30 次單獨運行後才會崩潰。這是在我使腳本盡可能強大之後。最後我發現如果我每次都提到這些對象,程式就不會崩潰。
例如:
不要這樣做-
| dt10i << 轉到( :事件持續時間 ) << 移動所選列( 之後(“事件日期” ) ) << 轉到( 2 ) << 清除列選擇; |
這樣做:
dt10i << 移動選定的列(之後(「日期」));
dt10i << 轉到( 2 );
dt10i << 清除列選擇;
我沒有找到這個問題的記錄,但我確信我已將其隔離,這就是我的情況下程式崩潰的原因。
回覆:JMP 存取衝突 - 可能的原因?每當發生無效的記憶體操作時,都可能發生存取衝突,我不確定我是否見過任何特定的模式,但 JMP 似乎對錶操作非常強大,因此這可能是我最後要查看的地方。當然,如果診斷問題所在的位置既困難又乏味,那麼問題就來了。我通常在程式碼中放置 Throw() 來嘗試在崩潰發生之前中止執行。然後,透過移動投擲的位置,我可以定位導致問題的程式碼區域。有時我做了一些明顯愚蠢的事情,有時可能是幾個錯誤,這些錯誤結合起來是災難性的。
這是一個例子。使用 validate 事件的處理程序建立模式視窗 - 處理程序返回 1 或 0 指示按一下「確定」時視窗是否應關閉:
新窗戶( “測試” , <<莫代爾,
<<驗證時(
TXT =修剪(特布<<取得文字) ;
如果(長度( TXT ) > 0 ,
已驗證= 1
,
已驗證= 0
) ;
// 返回
已驗證
) ,
陣容盒( NCOL ( 1 ) ,間距( 10 ) ,
文字方塊( “輸入一些東西,任何東西,但一些東西:” ) ,
特布=文字編輯框( ”” )
)
)
這工作正常,您可以運行它而不會導致 JMP 崩潰!當我們編寫函數或事件處理程序時,最後評估的是傳回的內容(請參閱 Glue 以了解原因)。但在某些時候,JMP 引入了 Return 函數,這使得「返回」更加明確 - 它適用於函數,但不適用於上面的事件處理程序。因此,在 OnValidate 的最後一行中將 isValid 替換為 Return(isValid) 將無法運作。但 JMP 不會崩潰。但如果我錯誤地使用了 OnClose 事件,那麼 JMP 就會不高興,並且會給我一個訪問衝突:
// 不要在家裡嘗試這個
新窗戶( “測試” , <<莫代爾,
<<關閉時(
TXT =修剪(特布<<取得文字) ;
如果(長度( TXT ) > 0 ,
已驗證= 1
,
已驗證= 0
) ;
返回(已驗證)
) ,
陣容盒( NCOL ( 1 ) ,間距( 10 ) ,
文字方塊( “輸入一些東西,任何東西,但一些東西:” ) ,
特布=文字編輯框( ”” )
)
)
回覆:JMP 存取衝突 - 可能的原因?我在一小時內遇到了兩次同樣的問題。