Я создал приложение для решения сеток судоку ... но вот моя проблема: в моем приложении есть некоторые ошибки и даже происходит сбой с моей конфигурацией распространения для компиляции (эквивалент конфигурации релиза).
Здеськод ошибки:
- (int*)completeNb:(int[9][9])aMatrix {
int n, nb;
int cell[2];
int *pcell;
BOOL found = FALSE;
BOOL pos = FALSE;
for (int k = 1; k <= 9; k++) {
n = 0;
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
if (aMatrix[i][j] == k)
n++;
}
}
if (n == 8) {
found = TRUE;
nb = k;
break;
}
}
if (found) {
for (int l = 0; l < 9; l++) {
for (int m = 0; m < 9; m++) {
if ([self isPossibleValue:aMatrix value:nb line:l column:m]) {
cell[0] = l;
cell[1] = m;
pos = TRUE;
break;
}
}
if (pos)
break;
}
pcell = cell;
}
else {
pcell = nil;
}
return pcell;
}
У меня есть специальная сетка судоку, где я должен найти {6,6} в качестве правильной позиции для числа 6 (6 должно быть в i = 6 и j = 6 в сетке).Он отлично работает в конфигурации отладки, но с Distrib Conf кажется, что у меня проблема с l и m vars -> цикл хорошо разрывается при l = 6 и m = 6 (следовательно, функция isPossibleValue , кажется, работает хорошо), но тогда моя переменная cell равна {1; 0}, вместоиз {6; 6}!
Я использую этот тип процесса (возвращая cell [2] ) со многими другими функциями, и у меня нет проблем с DistribConf.
Моя вторая проблема - и эта проблема провоцирует сбой приложения - связана со следующим кодом (опять же, отлично работает с конфигурацией отладки).
- (void)solver:(int[9][9])aMatrix {
if (!Termine) {
int *emptyCell = [self firstEmptyCell:aMatrix];
if (emptyCell != nil) {
int i = emptyCell[0];
int j = emptyCell[1];
for (int k = 1; k <= 9; k++) {
if ([self isPossibleValue:aMatrix value:k line:i column:j]) {
aMatrix[i][j] = k;
[self solver:aMatrix];
aMatrix[i][j] = 0;
}
}
}
else {
if (!Termine) {
Termine = TRUE;
for (int i = 0; i < 9; i++)
for (int j = 0; j < 9; j++)
res[i][j] = aMatrix[i][j];
}
}
}
}
Примечание: однаРешение - я не уверен, что это лучший вариант - это изменить уровень оптимизации с «самого быстрого, самого маленького» на «нет».
Спасибо за вашу помощь!