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 访问冲突 - 可能的原因?我在一小时内遇到了两次同样的问题。