IOS:分发(发布)配置错误和崩溃

时间:2011-01-22 12:33:35

标签: iphone xcode release distribution

我已经创建了一个解决数独网格的应用程序......但是 这是我的问题:我的应用程序有一些错误,甚至与我的分发配置崩溃进行编译(相当于发布配置)。

以下是错误的代码:

- (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 在网格中)。它在Debug Configuration中完美运行,但是使用Distrib Conf,我似乎遇到了 l m vars - &gt;的问题。循环在 l = 6 m = 6 时完好无损(因此, isPossibleValue 函数似乎运行良好),但随后我的 cell 变量等于{1; 0},而不是{6; 6}!

我正在使用这种过程(返回 cell [2] )和许多其他功能,我对Distrib Conf没有任何问题。

我的第二个问题, - 这个问题导致应用程序崩溃 - 使用以下代码(再次,完美地使用调试配置)。

- (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];
            }
        }

    }
}

注意:一个解决方案, - 我不确定这是最好的解决方案 - 是将优化级别从“最快,最小”改为“无”。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

对于第一种情况,问题出在int cell[2];。它有一个本地范围,从函数返回后,该数组指向的内存区很可能会被重新分配以满足其他需求。一个快速的解决方案是添加static说明符:

static int cell[2];

对于第二个代码段,请确保emptyCell每次分配给ij值不超过aMatrix界限[0..8] [ 0..8]。