javascript memory-corruption

¿Qué podría causar la corrupción de memoria en JavaScript?



memory-corruption (1)

¿Es posible que uno de sus archivos se guarde con una codificación diferente? Me fijaría en eso, y también me aseguraré de que esté sirviendo los archivos con los tipos de codificación y mimo correctos.

Podría ser una buena idea realizar algunas pruebas en los que console.log() los valores de uid medida que se generan para confirmar que el daño se produce de hecho después de que se crean los objetos. Sospecho que está sucediendo cuando son creados.

Estoy desarrollando una aplicación que utiliza editores de TinyMCE para permitir que el usuario modifique el contenido. He desarrollado una clase Prototype.js que, después de la inicialización, genera una ID única y crea un editor TinyMCE en un <div> con esa ID. Aquí hay algunos de los códigos relevantes:

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; },

En muchos lugares, me referiré al uid() una Region , por ejemplo, cuando ocurren eventos dentro del editor TinyMCE (por ejemplo, la selección cambia) mis manejadores reciben el ID del editor. A menudo haré

var index = Region.instances.invoke(''uid'').indexOf(uid);

Para encontrar la instancia real de la Region refleja la interfaz en la que ocurrieron los eventos.

Solo he establecido la propiedad _uid de una Region determinada una vez . Estoy seguro de esto.

Pero en Firefox 9.0.1, estoy viendo un comportamiento realmente extraño. Cuando se activan los eventos, no se puede encontrar el editor al que se están disparando porque el index en el código anterior es -1 . Después de inspeccionar en Firebug, vi esto:

Esos son mensajes de depuración de mi código, que registran varias cosas (la altura de las regiones en este caso) junto con el valor this.uid() la región. ¡La memoria parece haberse corrompido! e incluso puede ver dónde sucede, la primera entrada del registro en círculo es correcta y las posteriores son incorrectas.

El mismo código funciona bien en Safari y Chrome. Hasta ahora solo Firefox 9.0.1 parece estar afectado ...

Para inspeccionar más, corrí esto en la consola Firebug:

>>> com.digitalfruition.Customizer.TypeRegion.instances.invoke(''uid''); ["�ᔮ��蒦ᓤ�瀀魳ᓪ�倀⛺ᓪ�怀�eg����遀"]

Eso no tiene sentido. ¿Qué podría causar la corrupción de la memoria como esta en JavaScript? ¿Cómo hago para solucionar esta situación?