什么可能导致JavaScript中的内存损坏?

时间:2012-01-25 01:14:15

标签: javascript memory-corruption

我正在开发一个使用TinyMCE编辑器的应用程序,允许用户修改内容。我开发了一个Prototype.js类,在初始化时,它会生成一个唯一的ID,并在具有该ID的<div>上创建一个TinyMCE编辑器。以下是一些相关代码:

Region = Class.create(
{
  initialize: function(options)
  {
    this._editorReady = false;
    this._index = Region.nextIndex++;
    this._uid = com.digitalfruition.Customizer.TypeRegion.uidPrefix+this._index;
    Region.instances.push(this);
    this.setupTinyMCE();
  },

  uid: function()
  {
    return this._uid;
  },

  index: function()
  {
    return this._index;
  },

在很多地方,我会引用Region的{​​{1}},例如,当TinyMCE编辑器中发生事件时(例如,选择更改),我的处理程序将被赋予编辑器的ID。我会经常这样做:

uid()

查找反映事件发生在界面的实际var index = Region.instances.invoke('uid').indexOf(uid); 实例。

我只设置过任何给定Region的{​​{1}}属性。我很确定。

但是在Firefox 9.0.1中,我看到了非常奇怪的行为。当事件触发时,无法找到他们正在触发的编辑器,因为上面代码中的_uidRegion。在Firebug中检查后,我看到了:

Screen Capture of odd behavior

这些是来自我的代码的调试消息,记录了各种事物(在这种情况下是区域的高度)以及区域的index值。 内存似乎已损坏!,您甚至可以看到它发生的位置,第一个带圆圈的日志条目是正确的,后续的日志条目是错误的。

相同的代码在Safari和Chrome中运行良好。到目前为止,只有Firefox 9.0.1似乎受到影响......

为了进一步检查,我在Firebug控制台中运行了它:

-1

这对我没有意义。什么可能导致JavaScript中的内存损坏?我该如何解决这种情况呢?

1 个答案:

答案 0 :(得分:1)

您的某个文件是否可能使用不同的编码保存?我会看一下,也可能确保你使用正确的编码和mime类型提供文件。

在生成console.log() uid值时,进行一些测试可能是个好主意,以确认在创建对象后实际发生了损坏。我怀疑它们是在创建时发生的。