Тема: JScript: Падает скрипт на одной из машин
Есть скрипт, использует 2х-мерные массивы (вернее массивы массивов) и некие рекурсивные алгоритмы.
Запускался на 3х машинах. Windows XP SP 2, Windows SP XP 3 и Windows 7
Так вот на той, которая с SP3 падает скрипт.
Функция, где возникает проблема: (m, n и columns - члены Matrix)
Matrix.prototype.ToString = function(dec_places, alignment, columndivider) {
var divider = " ";
if (!isUndefined(columndivider)){
divider = columndivider;
}
var str = "";
with(this){
for (var j=0; j<m; j++){
for (var i=0; i<n; i++){
var part = "";
if (!isUndefined(dec_places))
part = columns[i][j].toFixed(dec_places);
else
part = columns[i][j]
if (!isUndefined(alignment)){
var diff = alignment - part.length;
var spaces = "";
for (var s=0; s<diff; s++)
spaces += " ";
part = spaces + part;
}
str += (part + divider);
}
if (j < m-1)
str += "\n";
}
}
return str;
}
Подключился отладчиком через Visual Studio, там вижу следующее
m=4 n=5
Все объекты в columns от i до j целы
Но на определенной комбинации i и j (конкретно при j = 1 и i = 1) после выполнения строчки
part = columns[i][j].toFixed(dec_places);this.columns становится 'undefined' и на следующем шаге цикла скрипт падает.
Может кто сталкивался с таким странным поведением WSH на каких-либо платформах?
Еще часть кода, которая может быть полезна для анализа (используются при создании этих матриц).
function Matrix(n, m)
{
this.n = n;
this.m = m;
this.columns = new Array(n);
for (var r=0; r<n; r++){
var col = new Array(m);
for (var it=0; it<m; it++){
col[it] = 0;
}
this.columns[r] = col;
}
}
Matrix.prototype.Clone = function() {
var mm = new Matrix(this.n, this.m);
for (var i=0; i<this.n; i++){
mm.columns[i] = this.columns[i].slice(0);
}
return mm;
}

